Core MLのアップデート

15.3K Views

July 12, 24

スライド概要

try! Swift Tokyo WWDC Recap 2024 での発表資料です。
https://lu.ma/ek0t0x7w?tk=C4llAl

profile-image

フリーランスiOSエンジニア 「エンジニアと人生」コミュニティ主宰

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

Core MLのアップデート 堤 修一 (@shu223)

2.

自己紹介 • 堤 修一 • @shu223 (GitHub, Zenn, Qiita, note, Docswell, 𝕏, YouTube, Podcast, etc...) • 書籍(商業出版4冊、個人出版多数 @BOOTH):

3.

趣味: WWDCのキャッチアップ • 記事 • 登壇 Apple IntelligenceとAI/MLパート抜粋 - iPhoneに手足を生やす Platforms State of the Union Apple Intelligenceに対応する - Bring 〜 to Apple Intelligence時代のApp Intents設計 Siri App Intents入門 - アプリのコア機能を公開す る アプリをSiri/Apple Intelligence対応にする方 法 App Intentsの新機能 1行で翻訳機能を追加できる Translation API Visionフレームワークの新機能 "What’s new in DockKit" のまとめ

4.

本日のテーマ Core MLのアップデートについて解説する

5.

『Core MLについて知る意味あるの?』

6.

WWDC24といえば

7.

開発者とApple Intelligence • App Intentsでアプリの機能をexposeしておけば、賢くなっ たSiriがよしなに呼び出してくれる • Writing Tools, Image Playground, Genmoji等のAPIも利用可 能

8.

開発者とApple Intelligence • App Intentsでアプリの機能をexposeしておけば、賢くなっ たSiriがよしなに呼び出してくれる → 受動的/間接的 • Writing Tools, Image Playground, Genmoji等のAPIも利用可 能 → 標準UIを利用

9.

こういう感じで使えるAPIではない

10.

ビルトインMLフレームワーク

11.

ビルトインMLフレームワーク:かなり充実してきた

12.

とはいえ 標準MLフレームワークがサポートしてない分野 はまだまだたくさんある • 汎用のセグメンテーション • デプス推定 • 高速な音声認識 • etc...

13.

⇒ Core MLを使えば自前でMLモデルを用意できる

14.

最新のMLモデルもアプリに組み込める

15.

ここまでのまとめ (Apple IntelligenceやビルトインMLフレームワーク群は非常に 魅力的な機能ではあるが、) Core MLを使うと標準サポートされてないMLモデルをiOS/ macOS/watchOS/visionOSアプリに持ってこれて楽しい!

16.

本日のアジェンダ • 新しい公式配布モデル • 推論スタックの改善 • 新しいモデル圧縮手法 • パフォーマンスレポート

17.

新しい公式配布モデル

18.

AppleのCore MLモデル配布 ページ developer.apple.com/machinelearning/models/

19.

AppleのCore MLモデル配布 ページ developer.apple.com/machinelearning/models/ • ここ数年追加されていないなかった

20.

AppleのCore MLモデル配布 ページ developer.apple.com/machinelearning/models/ ! • ここ数年追加されていないなかった • 久々の追加

21.

Hugging Face Hubで公開さ れるように Core ML Gallery Models • WWDC24会期中に公開されたもよう • おそらくこっちの方がモデル配布ペ ージより更新が早い

22.

新公式配布モデル1: セグメンテーション

23.

既存のセグメンテーション手 法 1/2 VisionやARKitにも人 1 2 ・髪・肌・歯・ 空 3 をセグメンテーションするAPIはあ る iOSDC 2018のトーク: 「Depth in Depth」 サンプル: iOS-Depth-Sampler 1 ARKitのPeople Occlusion 2 Portrait Matteで背景分離/セグメンテーション 3 iOSで「髪」「肌」「歯」「空」をセグメンテーションする

24.

既存のセグメンテーション手 法 2/2 一般物体のセグメンテーションCore ML モデルも2019年から公式配布されてい る Apple公式のセグメンテーション用Core MLモデル「DeeplabV3」

25.

新しい公式配布セグメンテーションモデル DETR Resnet50 Semantic Segmentation huggingface.co/apple/coreml-detr-semantic-segmentation • iOS 17以降で利用可能 Device OS 推論時間 (ms) iPhone 15 Pro Max 17.5 40 iPhone 12 Pro Max 18.0 52

26.

デモ

27.

速度も精度も良さげ • old • new

28.

新公式配布モデル2: デプス推定

29.

デプス推定とは 複眼レンズの視差、TrueDepthカメラ、 LiDARをいずれも使用せず、RGB写真か ら機械学習で深度を推定 → 「奥行き」の情報が得られる

30.

既存のデプス推定モデル • デプス推定Core MLモデル「FCRN」 が2019年から公式配布されている 4 4 Apple公式のデプス推定Core MLモデル「FCRN-DepthPrediction」

31.

新しい公式配布デプス推定モデル Depth Anything V2 huggingface.co/apple/coreml-detr-semantic-segmentation • デプス推定のState-of-the-art(最先端)モデル • iOS 17以降で利用可能 Device OS Inference time (ms) iPhone 12 Pro Max 18.0 31.10 iPhone 15 Pro Max 17.4 33.90

32.

デモ

33.

めちゃくちゃ良さげ • 速度も精度も非常に良い • 出力デプスマップの解像度も(FCRN と比較して)大幅アップ • 128 × 160 → 518 × 392

34.

(余談) visionOSでも同モデルを利用? visionOSは、先進的な機械学習を活用して、2D画像をVision Pro で真に生き生きと映し出される美しい空間写真に変換します。 5 visionOS 2、Apple Vision Proに新しい空間コンピューティング体験を提供 - Apple 5

35.

推論スタックの改善

36.

推論スタック全体の改善 → パフォーマンスが大幅に向上 • 図はiOS 17と18の推論時間の比較 • OS内での改善なので、モデルを再コ ンパイルしたり、コードを変更せず とも恩恵を受けられる

37.

試してみる

38.

Core ML Stable Diffusion XL @iOS 17 Hugging Face製アプリ「Diffusers」で Core ML版Stable Diffusion XLモデル がiOSで動くか検証した • iPhone 15 Pro 使用 6 Core ML版Stable DiffusionをiOSで快適に動かす 6

39.

Core ML Stable Diffusion XL @iOS 17 (iPhone 15 Pro 使用) • モデルのロード • 起動毎に5分 • 画像生成 • 必ずクラッシュ

40.

Core ML Stable Diffusion XL @iOS 17 (iPhone 15 Pro 使用) • モデルのロード • 起動毎に5分 • 画像生成 • 必ずクラッシュ

41.

Core ML Stable Diffusion XL @iOS 18 同モデルをiOS 18で動かしてみた • 起動毎のローディング • iOS 17では5分 → 3分(2回目以降20〜40秒) • 画像生成 • iOS 17では不可 → 40秒前後 7 画像生成時のメモリ使用量はピークで2GB程度 7

42.

推論スタック全体の改善 ! iOS 17では動かなかったStable Diffusion XLモデルがiOS 18ではiPhone オンデバイスで推論(画像生成)できる ように

43.

新しいモデル圧縮手法

44.

Core ML × 生成AIの問題 8 9 サイズがでかすぎる(数GB〜10GB以上もザラ) • アプリバイナリに含められない/DLさせるにもデカすぎる • メモリを食うので落ちる • 推論(生成)時間もかかる 8 9 ローカルLLM on iOS の現状まとめ ローカルLLMをCore MLモデルに変換する - Exporters の使い方 !

45.

Core ML × 生成AIの問題 サイズがでかすぎる(数GB〜10GB以上もザラ) → 強力なモデル圧縮手段が必要

46.

coremltools とは • PyTorch等で作成したモデ ルをCore ML形式に変換す るツール • モデルを圧縮する機能も持 っている • オープンソース

47.

coremltoolsとCore MLフレームワークのバージョン Core ML coremltools iOS 18, macOS 15, visionOS 2, watchOS 11 8 iOS 17, macOS 14, visionOS 1, watchOS 10 7 iOS 16, macOS 13, visionOS 1, watchOS 9 6 ... ... iOS 11, macOS 10.13, visionOS 1, watchOS 4 1 今回は coremltools 8 (現時点の最新は 8.0b1)の話

48.

既存のモデル圧縮手法

49.

Palettization(パレット化)

50.

Palettization(パレット 化) • 似たような値を持つ重みをクラスタ 化 • クラスタのセントロイドをLUTに格納 → LUTへのNビットのインデックスマッ プが圧縮後の重みとなる(例では2ビッ トに圧縮)

51.

Quantization(量子化)

52.

Quantization(量子化) • Floatの重みを整数の範囲に線形にマ ッピング → Nビット整数重みとスケールとバイア スのペアが格納される

53.

Pruning(枝刈り)

54.

Pruning(枝刈り) • 小さい重みを0にする • ビットマスクと0でない値だけを保存 する

55.

既存の圧縮手法の限界 5GBのモデルを16 → 4ビットまで圧縮すると生成結果が破綻

56.

何が問題なのか? 4ビットPalettization→ 16個のセントロイドだけで大きなモデル の重みすべてを表現しようとして破綻している

57.

新しいPalettization

58.

新しいPalettization • 複数のLUTを保存できるよ うに → 低ビットに圧縮しつつも精 度を維持

59.

新しいLinear quantization iOS 17ではチャンネルごとにスケールとバイアスを設定 → iOS 18ではこれらをブロックごとに設定可能に

60.

Pruning後のさらなる圧縮が可能に Pruning + Palettization / Pruning + Quantization

61.

試してみる

62.

Stable Diffusionモデルを新しいPalettization で圧縮 Stable Diffusion v2.1 (非XL) 10 のCore MLモデルを新 Palettizationで圧縮する 10 XLではなくこちらを選んだのは、圧縮前のモデルをモバイルで動かしてパフォーマンスを比較できるため

63.

圧縮前 • モデルサイズ:1.73 GB (Unet.mlmodelc) • 画像生成時間:約13秒 (split_einsum 利 用) (iOS 18 @iPhone 15 Proで実行)

64.

Palettizationのコード グループ化されたチャンネルごとのPalettizationを適用 import coremltools.optimize.coreml as cto_coreml op_config = cto_coreml.OpPalettizerConfig( nbits=4, # 4ビットに圧縮 mode="kmeans", # クラスタリング手法 group_size=16, # グループサイズ granularity="per_grouped_channel", # 粒度 ) config = cto_coreml.OptimizationConfig(op_config) compressed_mimodel = cto_coreml.palettize_weights(mlmodel, config)

65.

圧縮後 • モデルサイズ:1.73 → 0.44 GB • 75%削減! • 画像生成時間:13秒 → 10秒 • 23%高速化! 11 (iOS 18 @iPhone 15 Proで実行) 11 こちらは新Palettizationというよりは SPLIT_EINSUM_V2 利用の寄与が大き い

66.

パフォーマンスレポート

67.

パフォーマンスレポートのア ップデート • さらに多くの情報を提供するように なった 12 • 各オペレーションの推定時間 • コンピュートデバイスのサポート • サポートされていない理由のヒン ト 12 実際に試してみたところ、「各オペレーションの推定時間」「サポートされて いない理由のヒント」はModel TypeがML Programなモデルのみ表示される

68.

デモ:DepthAnythingV2SmallF16のレポート

69.

MLComputePlan API • パフォーマンスレポートのAPI版 • MLOps for Core MLが捗りそう // Load the compute plan of an ML Program model. let computePlan = try await MLComputePlan.load(contentsOf: modelURL, configuration: configuration) guard case let .program(program) = computePlan.modelStructure else { ... } // Get the main function. guard let mainFunction = program.functions["main"] else { ... } let operations = mainFunction.block.operations for operation in operations { // コンピュートデバイスのサポート情報を取得 let computeDeviceUsage = computePlan.deviceUsage(for: operation) // 推定コストを取得 } let estimatedCost = computePlan.estimatedCost(of: operation)

70.

まとめ • Core MLのアップデート • 新しい公式配布モデル • 推論スタックの改善 • 新しいモデル圧縮手法 • パフォーマンスレポート

71.

リファレンス • Bring your machine learning and AI models to Apple silicon - WWDC24 - Videos - Apple Developer • Deploy machine learning and AI models on-device with Core ML - WWDC24 - Videos - Apple Developer • coremltools API — coremltools API Reference 8.0b1 documentation