3.3K Views
July 23, 24
スライド概要
Mobile勉強会 Wantedly × チームラボ × Sansan #15 での発表資料です。
https://sansan.connpass.com/event/321922/
フリーランスiOSエンジニア 「エンジニアと人生」コミュニティ主宰
iOSで生成AIを扱う方法 のまとめ 堤 修一 (@shu223)
自己紹介 • 堤 修一 • @shu223 (GitHub, Zenn, Qiita, note, Docswell, 𝕏, YouTube, Podcast, etc...) • 書籍(商業出版4冊、個人出版多数 @BOOTH):
本日の発表内容 iOSオンデバイスで動く生成AIモデルを自分のアプリに組み込む 実装方法のまとめ • ローカルLLM • 画像生成(Text-to-Image) • 音声認識(Audio-to-Text) • and more!
サンプルコード iOS×生成AIのサンプル集 「iOS-GenAI-Sampler」
1. ローカルLLM
ローカルLLM on iOS • LLMがオンデバイスで動かせる • いくら使っても無料 • セキュア/プライバシー保護 • 最近のモデルは軽量でも優秀 • 同じ実装で最新モデルも動かせる
ローカルLLMをiOSアプリに組み込む ggerganov/llama.cpp のSwift Package を利用する • llama.cppとは • LLMが高速に動くランタイム • C/C++製 • Apple Siliconに最適化(Metal利用)
実装のポイント • llama.cppのSwift PackageはほぼC++のコードしかない • → サンプルのLibLlama.swiftを参考にラッパーを書く 1 • GGUFフォーマットのモデルの取得が必要 2 • DownloadButtonにHugging FaceからのDLロジック 1 2 LlamaContext が実際に llama ライブラリを叩いている部分 極小モデルでも1GB以上はあり、アプリバンドルに含めるには大きすぎる。
モバイルデバイス向けおすすめモデル • 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)
more • ローカルLLM on iOS の現状まとめ • 記事(Zenn) • スライド • 動画 • llama.cppの公式Swift Packageの使い方を調べたメモ llama.swiftuiのコードリーディング
2. 画像生成(Text-to-Image)
Core ML Stable Diffusion • オンデバイス画像生成 • 多様なモデル • v2.1モデル(速い) • XLモデル(高解像度) • その他派生モデルも同様の実装で 動かせる
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
詳細 • Stable DiffusionをCore MLモデルに変換する • Core ML Stable Diffusionを自分のiOSアプリに組み込む手順
3. 音声認識(Audio-to-Text)
WhisperKit • オンデバイス音声認識 • Apple Siliconに最適化された whisper.cppのCore ML版よりもさら に2〜3倍速い • 音声・動画ファイルからの書き起こ し/マイク入力のリアルタイム認識
標準の音声認識フレームワークSpeechとの比較 • WhisperKit 15分の音声ファイルを51秒で書き起こし • Speech 15分の音声ファイルを6分で書き起こし
WhisperKitをアプリに組み込む argmaxinc/WhisperKit のSwift Packageを利用する let pipe = try? await WhisperKit() let transcription = try? await pipe!.transcribe(audioPath: path)?.text
実装のポイント • 公式サンプル が、FatViewControllerならぬ非常にFatな SwiftUIビュー... • 1つのビューの中にHugging Faceからのモデルダウンロー ドも音声処理ロジックもすべて入っている • GenAI Samplerではリファクタリングして使いまわしやす くする予定
詳細 • iOS/macOSオンデバイスで爆速で動作する音声認識モデル WhisperKit • WhisperKit がだいぶ良いので紹介する • WhisperKitサンプルのソースコードを読む
その他GenAI-Samplerに実装済みのサンプル • iOS 18のTranslationフレー ムワーク • 標準・無料のオンデバイ ス翻訳 • GPT-4oを用いたマルチモー ダル入力のサンプル • リアルタイム動画理解
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フレームワー ク利用
⭐ いただけると嬉しいです shu223/iOS-GenAI-Sampler on GitHub
ご清聴ありがとうございました!