記事

デバイスでのモデルのダウンロードとコンパイル

Appのインストール後に、ユーザーのデバイスにCore MLモデルを配布します。

概要

特定のユースケースでは、モデルをAppにバンドルするよりも、ユーザーのデバイスでモデルをダウンロードしてコンパイルする方が有益です。様々なモデルによってサポートされる多様な機能を持つAppの場合、バックグラウンドで個々にモデルをダウンロードすると、ユーザーがすべてのモデルをダウンロードする必要がなく、帯域幅とストレージを節約できる可能性があります。同様に、ロケールや地域によって、使用するCore MLモデルが異なる場合があります。また、ユーザーがオフラインの時にモデルが更新され、アップデートがワイヤレスで提供される場合も考えられます。

バックグラウンドでのダウンロードとコンパイルの実装

モデル定義ファイル(.mlmodel)をコンパイルする前に、このファイルがデバイス上にあることが必要です。URLSession(英語)CloudKit(英語)、またはその他のネットワーキングツールキットを使って、ユーザーのデバイス上にAppで使うモデルをダウンロードします。

compileModel(at:)(英語)を呼び出して、.mlmodelcファイルを生成します。このファイルはMLModel(英語)のインスタンス初期化に使用されます。このモデルの機能は、Appにバンドルされたモデルと同じです。

リスト1

モデルファイルのコンパイルと、コンパイル版からの MLModel インスタンスの作成

let compiledUrl = try MLModel.compileModel(at: modelUrl)
let model = try MLModel(contentsOf: compiledUrl)

再使用可能なモデルの永続的な場所への移動

帯域幅の使用を制限するため、可能であれば、ダウンロードとコンパイルのプロセスを繰り返さずにすむようにします。モデルは一時的な場所にコンパイルされます。コンパイルされたモデルを再使用できる場合は、Appのサポートディレクトリなど、永続的な場所にモデルを移動します。

リスト2

.mlmodelcファイルを App のサブディレクトリにコピー

// find the app support directory
let fileManager = FileManager.default
let appSupportDirectory = try! fileManager.url(for: .applicationSupportDirectory,
		in: .userDomainMask, appropriateFor: compiledUrl, create: true)
// create a permanent URL in the app support directory
let permanentUrl = appSupportDirectory.appendingPathComponent(compiledUrl.lastPathComponent)
do {
	// if the file exists, replace it. Otherwise, copy the file to the destination.
	if fileManager.fileExists(atPath: permanentUrl.absoluteString) {
		_ = try fileManager.replaceItemAt(permanentUrl, withItemAt: compiledUrl)
	} else {
		try fileManager.copyItem(at: compiledUrl, to: permanentUrl)
	}
} catch {
	print("Error during copy: \(error.localizedDescription)")
}

関連項目

機械学習モデル

class MLModel(英語)

機械学習モデルのすべての詳細をカプセル化したものです。

連続する入力を使用した予測の作成

再帰型ニューラルネットワーク(RNN)モデルを統合し、連続する入力(シーケンス)を処理します。