iOSで生成AIを扱う方法のまとめ

3.3K Views

July 23, 24

スライド概要

Mobile勉強会 Wantedly × チームラボ × Sansan #15 での発表資料です。
https://sansan.connpass.com/event/321922/

profile-image

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

シェア

またはPlayer版

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

(ダウンロード不可)

関連スライド

各ページのテキスト
1.

iOSで生成AIを扱う方法 のまとめ 堤 修一 (@shu223)

2.

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

3.

本日の発表内容 iOSオンデバイスで動く生成AIモデルを自分のアプリに組み込む 実装方法のまとめ • ローカルLLM • 画像生成(Text-to-Image) • 音声認識(Audio-to-Text) • and more!

4.

サンプルコード iOS×生成AIのサンプル集 「iOS-GenAI-Sampler」

5.

1. ローカルLLM

6.

ローカルLLM on iOS • LLMがオンデバイスで動かせる • いくら使っても無料 • セキュア/プライバシー保護 • 最近のモデルは軽量でも優秀 • 同じ実装で最新モデルも動かせる

7.

ローカルLLMをiOSアプリに組み込む ggerganov/llama.cpp のSwift Package を利用する • llama.cppとは • LLMが高速に動くランタイム • C/C++製 • Apple Siliconに最適化(Metal利用)

8.

実装のポイント • llama.cppのSwift PackageはほぼC++のコードしかない • → サンプルのLibLlama.swiftを参考にラッパーを書く 1 • GGUFフォーマットのモデルの取得が必要 2 • DownloadButtonにHugging FaceからのDLロジック 1 2 LlamaContext が実際に llama ライブラリを叩いている部分 極小モデルでも1GB以上はあり、アプリバンドルに含めるには大きすぎる。

9.

モバイルデバイス向けおすすめモデル • Gemma 2B • Google製の商用利用可能な軽量LLM、2024年2月リリース • 量子化モデル: Q4 (1.5GB), Q8 (2.67 GB) • Phi-3-mini • Microsoft製LLM、2024年4月リリース、38億パラメータ • 量子化モデル: Q4 (2.2 GB)

10.

more • ローカルLLM on iOS の現状まとめ • 記事(Zenn) • スライド • 動画 • llama.cppの公式Swift Packageの使い方を調べたメモ llama.swiftuiのコードリーディング

11.

2. 画像生成(Text-to-Image)

12.

Core ML Stable Diffusion • オンデバイス画像生成 • 多様なモデル • v2.1モデル(速い) • XLモデル(高解像度) • その他派生モデルも同様の実装で 動かせる

13.

Core ML Stable Diffusionをアプリに組み込む apple/ml-stable-diffusion のSwift Packageを利用する import StableDiffusion ... let pipeline = try StableDiffusionPipeline(resourcesAt: url) try pipeline.loadResources() let image = try pipeline.generateImages(prompt: prompt).first

14.

詳細 • Stable DiffusionをCore MLモデルに変換する • Core ML Stable Diffusionを自分のiOSアプリに組み込む手順

15.

3. 音声認識(Audio-to-Text)

16.

WhisperKit • オンデバイス音声認識 • Apple Siliconに最適化された whisper.cppのCore ML版よりもさら に2〜3倍速い • 音声・動画ファイルからの書き起こ し/マイク入力のリアルタイム認識

17.

標準の音声認識フレームワークSpeechとの比較 • WhisperKit 15分の音声ファイルを51秒で書き起こし • Speech 15分の音声ファイルを6分で書き起こし

18.

WhisperKitをアプリに組み込む argmaxinc/WhisperKit のSwift Packageを利用する let pipe = try? await WhisperKit() let transcription = try? await pipe!.transcribe(audioPath: path)?.text

19.

実装のポイント • 公式サンプル が、FatViewControllerならぬ非常にFatな SwiftUIビュー... • 1つのビューの中にHugging Faceからのモデルダウンロー ドも音声処理ロジックもすべて入っている • GenAI Samplerではリファクタリングして使いまわしやす くする予定

20.

詳細 • iOS/macOSオンデバイスで爆速で動作する音声認識モデル WhisperKit • WhisperKit がだいぶ良いので紹介する • WhisperKitサンプルのソースコードを読む

21.

その他GenAI-Samplerに実装済みのサンプル • iOS 18のTranslationフレー ムワーク • 標準・無料のオンデバイ ス翻訳 • GPT-4oを用いたマルチモー ダル入力のサンプル • リアルタイム動画理解

22.

Upcoming Features ! • ローカルLLM on iOSの llama.cpp以外の実装手段 • MLX, ML) Exporters (Core • Apple Intelligence (Genmoji, Writing Tools, Image Playground) • Stable Diffusion派生モデル • RAG • Google Gemini (iOS SDK) • OpenAIのEmbeddings • OpenAI APIの音声・動画 リアルタイム入出力(サポ • 標準のNatural ート待ち) API利用 Languageフレームワー ク利用

23.

⭐ いただけると嬉しいです shu223/iOS-GenAI-Sampler on GitHub

24.

ご清聴ありがとうございました!