View in English

  • メニューを開く メニューを閉じる
  • Apple Developer
検索
検索を終了
  • Apple Developer
  • ニュース
  • 見つける
  • デザイン
  • 開発
  • 配信
  • サポート
  • アカウント
次の内容に検索結果を絞り込む

クイックリンク

5 クイックリンク

ビデオ

メニューを開く メニューを閉じる
  • コレクション
  • トピック
  • すべてのビデオ
  • 利用方法

その他のビデオ

ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。

  • 概要
  • トランスクリプト
  • Core MLを使用してデバイス上に機械学習モデルとAIモデルをデプロイ

    Core MLによって機械学習モデルとAIモデルを変換し実行する際のスピードとメモリパフォーマンスを最適化する、新しい方法を確認しましょう。モデルの表現、パフォーマンスに関するインサイトの取得、実行、モデルのスティッチングのための新しいオプションについて解説します。これらのオプションを組み合わせることで、デバイス上のプライベートな環境で効果的な体験を実現できます。

    関連する章

    • 0:00 - Introduction
    • 1:07 - Integration
    • 3:29 - MLTensor
    • 8:30 - Models with state
    • 12:33 - Multifunction models
    • 15:27 - Performance tools

    リソース

    • Core ML
    • Forum: Machine Learning and AI
    • Stable Diffusion with Core ML on Apple Silicon
      • HDビデオ
      • SDビデオ

    関連ビデオ

    WWDC23

    • 非同期予測によるCore ML統合の改善方法
    • Core ML Toolsを使った機械学習モデルの圧縮法

    Tech Talks

    • PyTorchモデルをCore MLに変換する
  • ダウンロード

    こんにちは Core MLチームのエンジニア Joshua Newnhamです 本日はCore MLの 新機能をご紹介します これらの新機能は機械学習やAIモデルを デバイス上で効率的にデプロイして 実行するのに役立ちます

    デバイス上でモデルを実行すると 新しい形式のやり取り パワフルなプロ用ツール 健康やフィットネスデータから インサイトに富んだ分析を作成できる 素晴らしい可能性が生み出されます その際 個人データのプライバシーと セキュリティは保護されます

    何千ものアプリがCore MLを使用して デバイス上のMLを活用した 素晴らしい体験を生み出しています みなさんにもできます

    このビデオではまず モデルデプロイワークフローにおける Core MLの役割を確認します 次は便利な機能について見ていきます まずモデル統合を簡単にする 新しいタイプについて説明します 次に状態を使ってモデルの推論効率を 高める方法を詳しく見ていきます その後は効率的なデプロイのための 多機能モデルを紹介します 最後に モデルのプロファイリングと デバッグに役立つ Core MLパフォーマンスツールの アップデートについて確認します では始めましょう

    機械学習ワークフローは 3つのフェーズで構成されています モデルのトレーニングと準備と統合です このビデオではデバイス上での 機械学習とAIモデルの統合と実行に 焦点を当てます トレーニングについては Apple GPUでのMLモデルとAIモデルの トレーニングに関する今年のビデオを ご覧になることをおすすめします モデルの変換と最適化については Appleシリコンへのモデルの導入に関する 今年のビデオをご覧ください

    モデルの統合はMLパッケージから始まります MLパッケージは 準備フェーズで作成された成果物です ここからCore MLを使うと このモデルをアプリに簡単に統合して 使用できます

    Core MLはXcodeと緊密に統合されており さまざまな種類の機械学習とAIモデルで デバイス上の推論を実行するための 統合APIを提供します

    モデルはAppleシリコンの パワフルな演算能力を使用して実行され CPU、GPU、Neural Engineに 作業をディスパッチします これはMPSグラフとBNNSグラフという Core MLモデルも使用できる 他の2つの機械学習フレームワークの 助けを借りて行われます ユースケースで Metalとの緊密な統合や CPUでのリアルタイム推論が 必要な場合に最適です 詳細については 関連するビデオをご覧ください 推論スタック全体で 大幅な改善が行われたため Core MLは今年 さらに優れたパフォーマンスを発揮します

    たとえばiOS 17と18の 相対的な予測時間を比較すると 多くのモデルでiOS 18の方が 高速であることがわかります この高速化はOSが実現するもので モデルの再コンパイルやコードの変更は 必要ありません これは他のデバイスにも当てはまりますが 高速化はモデルとハードウェアによって 異なります

    モデルを変換したら モデルを効率的に統合して実行する方法を 見ていく準備が整いました

    モデルをアプリに統合するのは 必要な入力を渡して 返された出力を読み取るだけの 簡単な作業です

    ただし より高度なユースケースでは 急激に複雑さが増す可能性があります たとえば生成AIは反復的であることが多く 複数のモデルが含まれる場合があります

    このようなユースケースでは モデルの外部に計算が存在し エンドツーエンドのパイプライン実行に必要な 接着剤やスティッチングとして機能します この計算をサポートするには 多くの場合 操作を一から実装するか 様々な低レベルAPIを使用する必要があり どちらもコードが長くて複雑になります でも これは今までの話です

    Core MLの新しいタイプである MLTensorをご紹介します MLTensorはこの計算をサポートする 便利で効率的な方法を提供します

    MLTensorは 機械学習フレームワークに典型的な 多くの一般的な演算操作と 変換操作を提供します

    これらの操作は Appleシリコンのパワフルな 演算能力を使用して実行され 高いパフォーマンスを実現します

    また人気のPython数値ライブラリに 似ているため 機械学習をすでにご存じの場合は より簡単かつ直感的に導入できます いくつかの例を見ながら APIを詳しく見てみましょう

    まずテンソルをいくつか作成して操作します テンソルには様々な作成方法がありますが ここでは2つを紹介します

    1つ目はMLShapedArrayから テンソルを作成し 2つ目はネストされたスカラの コレクションを使用します MLShapedArrayと同様に MLTensorは多次元配列で 形状とスカラ型で定義されます 形状は各軸の長さを指定し スカラ型は保持する要素の型を示します テンソルの作成方法がわかったので テンソルの操作方法を見ていきましょう 基本的な計算から始めます テンソルは幅広い演算に対応します この例では 要素ごとに加算と乗算を実行し その後 結果の平均を計算します テンソルはリテラルとシームレスに連携し フレームワークは互換性のある形状を 自動的にブロードキャストします 次に結果をその平均と比較することで ブール型マスクが作成されます このマスクに結果を乗算して フィルタ処理したバージョンを作成し マスクがfalseである値をゼロにします 次にテンソルの形状をインデックス付けして 変換する方法を説明します Pythonの数値ライブラリと同様に 各次元にインデックスを付けることで テンソルをスライスできます この例では行列の最初の行を取得し reshapeメソッドを使用して 展開し直します すべてのテンソル操作は 非同期でディスパッチされます このため テンソルはその基礎となるデータに アクセスする前に 明示的にMLShapedArrayに 具体化される必要があります そうすることで 上流のすべての操作が完了し データが利用可能になります

    ここまでテンソルを作成して 操作する方法を見てきたので 次はもっと面白いことに目を向けましょう MLTensorがどのように 大規模な言語モデルの統合を 簡素化するかを見てみましょう

    まずモデルの例と その出力について簡単に紹介します モデルは自己回帰言語モデルです つまり前の単語のコンテキストに基づいて 次の単語またはトークンを 予測するようにトレーニングされます

    文を生成するには 予測された単語を入力に追加し シーケンス終了トークンが検出されるか 設定された長さに達するまで この処理を繰り返します ただし言語モデルは 1つの単語を出力するのではなく 語彙に含まれるすべての単語の スコアを出力します 各スコアは次にその単語が来ることに対する モデルの信頼度を表します

    デコーダはこれらのスコアをもとに さまざまな戦略を使用して 次の単語を選択します たとえば スコアが最も高い単語を選択したり 調整された確率分布で ランダムにサンプリングしたりします デコード方法は変更できるため このステップは通常 モデルとは別に保持されます これはMLTensorにとって最適です MLTensorの導入前と導入後の いくつかのデコード方法の実装を比較して どのように変化するかを見てみましょう

    このデモではHuggingFaceの Swift Transformerパッケージと Chatアプリの修正バージョンに加えて 準備のビデオで変換および最適化された Mistral 7Bモデルを使用します デコーダの実装を比較する前に モデルの動きを見てみましょう スーパーヒーローのコーギーが登場する 架空の子供向けストーリーの タイトルの候補を生成するように モデルに指示します

    スタートとしては素晴らしいですが さらにクリエイティブにしたいと思います アプリはデフォルトで 最も可能性が高い単語を選択します これは貪欲デコードと呼ばれる手法です

    別のデコード方法を見てみましょう

    top-kサンプリングを有効にすると アプリは次の単語を選択する際に 常にスコアが最大の単語を選ぶのではなく top-kの最も可能性の高い単語を ランダムにサンプリングします

    最も可能性の高い単語をランダムに サンプリングすることに加えて 温度を調整することで確率分布に影響を 与えることもできます 温度が高いと分布が平坦になり より創造的な応答が得られますが 温度が低いと逆の効果が生まれ より予測可能な出力が得られます

    温度1.8で top-kサンプリングを使用して モデルを再実行してみましょう

    これはもう少し興味深いものになります 2つのデコード方法の結果を確認したので MLTensorを使う場合と使わない場合の 実装を比較してみましょう 2つの実装を比較すると 明らかな違いが1つあります それはMLTensorを使用して 同じ機能を実現すると 必要なコードが いかに少なくなるかということです といっても 元のバージョンが 間違っているという意味でも 低レベルAPIが不要 という意味でもありません それどころか これは適切に作成された パフォーマンスの高いコードであり 低レベルのAPIが必要なインスタンスも 多数あります しかし多くの一般的な機械学習タスクでは MLTensorは簡潔な代替手段になります これにより低レベルの詳細ではなく 優れた体験を作成することに もっと集中できるようになります 前のセクションでは MLTensorが言語モデルからの 出力のデコードを簡素化する方法について 説明しました このセクションでは状態について説明し 状態を使用して 言語モデルから各単語を生成するのに かかる時間を短縮する方法を探ります まず状態の意味を説明します 皆さんがこれまで操作したモデルの大半は おそらくステートレスです つまり履歴を保持せずに 各入力を個別に処理します たとえば畳み込みニューラルネットワーク に基づく画像分類器は 各入力が前の入力から独立して 処理されるため ステートレスです

    これはご想像のとおり 前の入力の履歴を保持する ステートフルモデルとは対照的です シーケンスデータに使用される 再帰型ニューラルネットワークなどの アーキテクチャは ステートフルモデルの一例です

    現在ステートフルモデルは 状態を手動で 管理することでサポートできます 状態は入力として渡され 更新されたバージョンが出力から取得され 次の予測に備えられます ただし 各時間ステップで状態に使用される データをロードおよびアンロードすると オーバーヘッドが発生します このオーバーヘッドは状態の規模が 大きくなるにつれて顕著になります

    今年 Core MLでは ステートフルモデルの サポートが向上しました 状態の維持を手動ではなく Core MLで実行するようになったため 前述のオーバーヘッドの一部が削減されます では状態が役立つ可能性がある 1つのモデルタイプに 注目してみましょう 前のセクションでは言語モデルが 語彙に含まれる すべての単語のスコアを出力し そのスコアが次に来る単語に対して モデルが割り当てる信頼度を 表すことを学びました スコアに加えて 使用されたモデルは特定の単語の キーとバリューのベクトルも出力します これらのベクトルは単語ごとに計算され ネットワーク全体に埋め込まれた アテンションメカニズムに使われることで モデルの自然な出力と 文脈的に関連のある出力を 生成する能力が向上します 各ステップで前の単語ベクトルの 再計算を避けるために ベクトルは保存・再利用されることが多く これはキーバリューキャッシュ 略してKVキャッシュと呼ばれます このキャッシュは新しい機能に最適です その方法を見てみましょう

    モデルの入力と出力を使って KVキャッシュを処理する代わりに Core MLの状態を使用して 管理できるようになりました これによりオーバーヘッドが削減され 推論の効率が向上し 予測時間が短縮されます

    状態のサポートは準備フェーズで モデルに明示的に追加する必要があります 方法については Appleシリコンへの モデルの導入に関するビデオをご覧ください

    モデルに状態があるかどうかは Xcodeでモデルを調べることで 簡単に確認できます

    状態が利用可能な場合は モデルプレビューの予測タブの モデル入力のすぐ上に表示されます

    では次の単語予測に使用される コードを更新して 状態をサポートする手順を見ていきましょう まずは必要な変更点を強調するために 状態のないバージョンを確認します 関連する部分だけに焦点を当てて キーとバリューのベクトルを格納するための 空のキャッシュを作成することから始めます

    このキャッシュは入力として モデルに提供され モデルから返された値を使用して 更新されます それでは状態をサポートするために 必要な変更を見ていきましょう

    ほとんどのコードは若干の調整を除けば 見慣れているはずです

    各状態を手動で事前割り当てする代わりに モデルインスタンスを使って 状態を作成します この例では Core MLはキーとバリューのベクトルを 格納するためのバッファを事前割り当てし 状態を参照するハンドルを返します このハンドルを使って これらのバッファにアクセスし 状態の存続期間を制御できます

    各キャッシュを入力として渡すのではなく モデルインスタンスによって作成された 状態を渡します 更新はインプレースで実行されるため キャッシュを更新する 最後の手順を省略できます これだけです 状態をサポートするようにコードを更新し 次の単語を予測する際に 高速化された機能を利用しました

    これはM3 Maxを搭載した MacBook Proで実行されている Mistral 7Bモデルを使用した KVキャッシュ実装の簡単な比較です 左は状態なしで実装されたKVキャッシュ 右は状態ありで実装された KVキャッシュを示しています 右は約5秒で完了しますが 左は約8秒かかりました 状態を使うと1.6倍高速になります パフォーマンスはもちろん モデルやハードウェアによって異なりますが 状態を使用した場合に期待できる メリットの概要はこれでわかります

    次のセクションでは 複数の機能を備えたモデルを 柔軟かつ効率的にデプロイできる Core MLの新機能について説明します 機械学習モデルについて考えるとき 通常は関数のように入力を受け取り 何らかの出力を生成するものを 思い浮かべます

    関数は実際 Core MLでニューラルネットワークを 表現する方法です 関数は通常 一連の操作を含む 1つの関数で構成されます この機能の自然な拡張は 複数の関数をサポートすることで 現在Core MLで利用できます この機能の具体例として 複数のアダプタを備えたモデルを 効率的にデプロイする方法を説明します

    アダプタとは 既存のネットワークに埋め込まれる 小さなモジュールで タスクに合わせた知識でトレーニングします 大規模に事前トレーニングした モデルの機能を 重みを調整せずに 効率的に拡張できます これにより1つのベースモデルを 複数のアダプタで共有できます この例ではアダプタを使って 潜在拡散モデルによって生成される 画像のスタイルに影響を与えます

    しかし複数のスタイルを デプロイしたい場合はどうでしょうか

    各アダプタにそれぞれ 2つ以上の特化モデルをデプロイするか アダプタの重みを 入力として渡す方法がありますが どちらも理想的とは言えません

    複数の機能に対応したことで 今後はより効率的なオプションを 利用できます

    複数のアダプタを共通のベースで 1つのモデルにマージし それぞれに関数を公開できます

    Appleシリコンへのモデルの導入に関する ビデオをご覧になり 複数の関数を含むモデルを 書き出す方法をご確認ください 特定の関数を含むモデルを読み込むために 必要なコードを見てみましょう

    多機能モデルの読み込みは 関数名を指定するだけです

    読み込み後 モデルで予測を呼び出すと 指定された関数が呼び出されます 指定がない場合は デフォルト値が呼び出されます 動作を見てみましょう

    このデモではオープンソースの Stable Diffusion XLモデルと 修正済みのHuggingFaceの Diffusersアプリを使用して テキストから画像を生成します パイプラインはMLTensorを使用して シームレスにつなぎ合わせた 複数のモデルで構成されています これには2つの関数を持つ Unetモデルが含まれます それぞれ異なるアダプタを使用して 生成された画像のスタイルに影響を与えます Xcodeで開くと モデルで使用できる 関数をプレビューできます

    このモデルには2つの関数 「sticker」と「storybook」があり 入力と出力が同じなので 両方に同じパイプラインを使用できます ただし必須ではなく 関数ごとに入出力を変えることも可能です アプリに戻って スーパーヒーロー コーギーのステッカーを 生成してみましょう

    素晴らしい 関数を切り替えてスーパーヒーローの スタイルを変えてみましょう

    いいですね このデモでは複数のアダプタを使用して 単一のモデルをデプロイする 方法を示しました 各アダプタには それぞれの関数を使ってアクセスします この機能は汎用性が高く 他の多くのシナリオで使用できます 皆さんがどのように使うか楽しみです 最後のセクションでは モデルの プロファイリングとデバッグに役立つ 機能強化と新しいツールについて 簡単に説明します まずはCore MLパフォーマンスレポートの アップデートです パフォーマンスレポートは すべての接続済みデバイスを対象に生成され コードの記述は不要です Xcodeでモデルを開き タブを選択し

    ボタンをクリックして 新しいレポートを作成し

    プロファイリングするデバイスと

    実行する コンピューティングユニットを選択して ボタンを押すだけです

    完了するとレポートには読み込み時間と 予測時間の概要とともに 演算ユニットの使用状況の 内訳が表示されます 今年のパフォーマンスレポートでは さらに多くの情報が提供されます 具体的には各操作の推定時間と 演算デバイスのサポートなどです 推定時間は 各操作に費やされた時間を示します これは各操作の推定相対コストに 中央予測時間を掛けて計算されます

    ネットワークのボトルネックを 特定するのに役立ちます 推定時間に基づいて 操作を並べ替えることで 簡単に行えます

    さらにサポートされていない操作に カーソルを合わせると 特定の演算デバイスで 実行できなかった理由のヒントが 表示されます

    この例では データ型が サポートされていないことがわかるので 準備段階に戻って 必要な変更を加え モデルとすべての演算デバイスの 互換性を確保できます

    このモデルでは 精度をFloat16に 更新するだけで済みました より多くの情報とともに パフォーマンスレポートをエクスポートして 他の実行と比較できます 比較することで モデルへの変更の影響を簡単に確認できます アプリでコードを記述する必要は まったくありません ただし コードを使用する方が便利な場合もあります MLComputePlan APIを使うなら コードが便利です パフォーマンスレポートと同様に MLComputePlanは Core MLのモデルに関する デバッグとプロファイリングの 情報を提供します APIは各操作のモデル構造と ランタイム情報を表示します 前述のように サポートされる 演算デバイスと推奨される演算デバイス 操作のサポートステータス 推定相対コストが含まれます では このビデオのまとめに 入りたいと思います Core MLの新機能を使用すると 機械学習とAIモデルをデバイス上で 効率的にデプロイして実行できます MLTensorを採用し モデルの統合が簡素化されました 状態を利用すると推論の効率が向上します 多機能モデルを使用して 複数の機能を備えたモデルを 効率的にデプロイできます パフォーマンスツールで 新しい情報を活用して モデルのプロファイルとデバッグを行えます オンデバイスの パワフルな機械学習を活用して 新しい体験を実現してください

  • 特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。

    クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。

Developer Footer

  • ビデオ
  • WWDC24
  • Core MLを使用してデバイス上に機械学習モデルとAIモデルをデプロイ
  • メニューを開く メニューを閉じる
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    メニューを開く メニューを閉じる
    • アクセシビリティ
    • アクセサリ
    • App Extension
    • App Store
    • オーディオとビデオ(英語)
    • 拡張現実
    • デザイン
    • 配信
    • 教育
    • フォント(英語)
    • ゲーム
    • ヘルスケアとフィットネス
    • アプリ内課金
    • ローカリゼーション
    • マップと位置情報
    • 機械学習
    • オープンソース(英語)
    • セキュリティ
    • SafariとWeb(英語)
    メニューを開く メニューを閉じる
    • 英語ドキュメント(完全版)
    • 日本語ドキュメント(一部トピック)
    • チュートリアル
    • ダウンロード(英語)
    • フォーラム(英語)
    • ビデオ
    Open Menu Close Menu
    • サポートドキュメント
    • お問い合わせ
    • バグ報告
    • システム状況(英語)
    メニューを開く メニューを閉じる
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles(英語)
    • フィードバックアシスタント
    メニューを開く メニューを閉じる
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program(英語)
    • News Partner Program(英語)
    • Video Partner Program(英語)
    • セキュリティ報奨金プログラム(英語)
    • Security Research Device Program(英語)
    Open Menu Close Menu
    • Appleに相談
    • Apple Developer Center
    • App Store Awards(英語)
    • Apple Design Awards
    • Apple Developer Academy(英語)
    • WWDC
    Apple Developerアプリを入手する
    Copyright © 2025 Apple Inc. All rights reserved.
    利用規約 プライバシーポリシー 契約とガイドライン