Phi-3-miniはMicrosoftの新しいモデルシリーズで、エッジデバイスやIoTデバイス上で大規模言語モデル(LLM)を展開可能にします。Phi-3-miniはiOS、Android、エッジデバイス向けに提供されており、BYOD環境での生成AIの展開を可能にします。以下の例では、iOS上でのPhi-3-miniの展開方法を示します。
- a. macOS 14以上
- b. Xcode 15以上
- c. iOS SDK 17.x(iPhone 14 A16以上)
- d. Python 3.10以上をインストール(Conda推奨)
- e. Pythonライブラリ
python-flatbuffersをインストール - f. CMakeをインストール
Semantic KernelはAzure OpenAI Service、OpenAIモデル、さらにはローカルモデルと互換性のあるアプリケーションフレームワークです。Semantic Kernelを通じてローカルサービスにアクセスすることで、セルフホストのPhi-3-miniモデルサーバーとの統合が簡単に行えます。
多くのユーザーはローカルでモデルを動かすために量子化モデルを利用しています。OllamaやLlamaEdgeは、さまざまな量子化モデルを呼び出すことができます。
ollama run phi3を直接実行するか、オフラインで設定可能です。ggufファイルのパスを指定したModelfileを作成します。Phi-3-mini量子化モデルを実行するサンプルコード:
FROM {Add your gguf file path}
TEMPLATE \"\"\"<|user|> .Prompt<|end|> <|assistant|>\"\"\"
PARAMETER stop <|end|>
PARAMETER num_ctx 4096
クラウドとエッジデバイスの両方でggufを使いたい場合、LlamaEdgeは優れた選択肢です。
git clone https://github.com/microsoft/onnxruntime.git
cd onnxruntime
./build.sh --build_shared_lib --ios --skip_tests --parallel --build_dir ./build_ios --ios --apple_sysroot iphoneos --osx_arch arm64 --apple_deploy_target 17.5 --cmake_generator Xcode --config Release
cd ../
-
a. コンパイル前にXcodeが正しく設定されていることを確認し、ターミナルでアクティブな開発者ディレクトリに設定してください:
sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer
-
b. ONNX Runtimeは異なるプラットフォーム向けにコンパイルする必要があります。iOSの場合、
arm64またはx86_64向けにコンパイル可能です。 -
c. コンパイルには最新のiOS SDKの使用を推奨しますが、過去のSDKとの互換性が必要な場合は古いバージョンも使用可能です。
注意: ONNX Runtimeを使った生成AIはプレビュー段階のため、仕様変更の可能性があります。
git clone https://github.com/microsoft/onnxruntime-genai
cd onnxruntime-genai
mkdir ort
cd ort
mkdir include
mkdir lib
cd ../
cp ../onnxruntime/include/onnxruntime/core/session/onnxruntime_c_api.h ort/include
cp ../onnxruntime/build_ios/Release/Release-iphoneos/libonnxruntime*.dylib* ort/lib
export OPENCV_SKIP_XCODEBUILD_FORCE_TRYCOMPILE_DEBUG=1
python3 build.py --parallel --build_dir ./build_ios --ios --ios_sysroot iphoneos --ios_arch arm64 --ios_deployment_target 17.5 --cmake_generator Xcode --cmake_extra_defines CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED=NO
生成AIをONNX RuntimeのC++ APIで利用するため、App開発にはObjective-Cを選びました。もちろんSwiftのブリッジングを使って関連呼び出しを行うことも可能です。
ONNX形式のINT4量子化モデルをインポートする必要があり、まずはダウンロードしてください。
ダウンロード後、Xcodeのプロジェクト内のResourcesディレクトリに追加します。
注意:
-
a. 対応するC++ヘッダーファイルをプロジェクトに追加します。
-
b. Xcodeに
onnxruntime-genaiの動的ライブラリを含めます。 -
c. テストにはC Samplesコードを使用します。ChatUIなどの追加機能も組み込めます。
-
d. プロジェクトでC++を使うため、
ViewController.mをViewController.mmにリネームし、Objective-C++を有効にしてください。
NSString *llmPath = [[NSBundle mainBundle] resourcePath];
char const *modelPath = llmPath.cString;
auto model = OgaModel::Create(modelPath);
auto tokenizer = OgaTokenizer::Create(*model);
const char* prompt = "<|system|>You are a helpful AI assistant.<|end|><|user|>Can you introduce yourself?<|end|><|assistant|>";
auto sequences = OgaSequences::Create();
tokenizer->Encode(prompt, *sequences);
auto params = OgaGeneratorParams::Create(*model);
params->SetSearchOption("max_length", 100);
params->SetInputSequences(*sequences);
auto output_sequences = model->Generate(*params);
const auto output_sequence_length = output_sequences->SequenceCount(0);
const auto* output_sequence_data = output_sequences->SequenceData(0);
auto out_string = tokenizer->Decode(output_sequence_data, output_sequence_length);
auto tmp = out_string;
セットアップが完了したら、アプリを実行してPhi-3-miniモデルの推論結果を確認できます。
より多くのサンプルコードや詳細な手順は、Phi-3 Mini Samplesリポジトリをご覧ください。
免責事項:
本書類はAI翻訳サービス「Co-op Translator」を使用して翻訳されました。正確性を期しておりますが、自動翻訳には誤りや不正確な部分が含まれる可能性があります。原文の言語によるオリジナル文書が正式な情報源とみなされます。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の利用により生じた誤解や誤訳について、当方は一切の責任を負いかねます。





