Phi-3-mini est une nouvelle série de modèles de Microsoft qui permet le déploiement de modèles de langage de grande taille (LLMs) sur des appareils en périphérie et des dispositifs IoT. Phi-3-mini est disponible pour les déploiements sur iOS, Android et appareils Edge, permettant ainsi de déployer l'IA générative dans des environnements BYOD. L'exemple suivant montre comment déployer Phi-3-mini sur iOS.
- a. macOS 14+
- b. Xcode 15+
- c. SDK iOS 17.x (iPhone 14 A16 ou supérieur)
- d. Installer Python 3.10+ (Conda est recommandé)
- e. Installer la bibliothèque Python :
python-flatbuffers
- f. Installer CMake
Semantic Kernel est un framework d'application qui vous permet de créer des applications compatibles avec Azure OpenAI Service, les modèles OpenAI et même les modèles locaux. Accéder aux services locaux via Semantic Kernel facilite l'intégration avec votre serveur de modèles Phi-3-mini auto-hébergé.
De nombreux utilisateurs préfèrent utiliser des modèles quantifiés pour exécuter des modèles localement. Ollama et LlamaEdge permettent d'appeler différents modèles quantifiés :
Vous pouvez exécuter ollama run phi3
directement ou le configurer hors ligne. Créez un fichier Modelfile avec le chemin vers votre fichier gguf
. Exemple de code pour exécuter le modèle quantifié Phi-3-mini :
FROM {Add your gguf file path}
TEMPLATE \"\"\"<|user|> .Prompt<|end|> <|assistant|>\"\"\"
PARAMETER stop <|end|>
PARAMETER num_ctx 4096
Si vous souhaitez utiliser gguf
à la fois sur des appareils cloud et périphériques simultanément, LlamaEdge est une excellente option.
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. Avant de compiler, assurez-vous que Xcode est correctement configuré et définissez-le comme répertoire de développeur actif dans le terminal :
sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer
-
b. ONNX Runtime doit être compilé pour différentes plateformes. Pour iOS, vous pouvez compiler pour
arm64
orx86_64
. -
c. Il est recommandé d'utiliser le dernier SDK iOS pour la compilation. Cependant, vous pouvez également utiliser une version antérieure si vous avez besoin de compatibilité avec des SDK plus anciens.
Remarque : Étant donné que l'IA générative avec ONNX Runtime est en aperçu, veuillez noter les éventuels changements.
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
J'ai choisi Objective-C comme méthode de développement de l'application, car en utilisant l'IA générative avec l'API C++ d'ONNX Runtime, Objective-C est mieux compatible. Bien sûr, vous pouvez également effectuer les appels correspondants via le pont Swift.
Nous devons importer le modèle de quantification INT4 au format ONNX, qui doit d'abord être téléchargé.
Après le téléchargement, vous devez l'ajouter au répertoire Resources du projet dans Xcode.
Remarque :
-
a. Ajoutez les fichiers d'en-tête C++ correspondants au projet.
-
b. Incluez
onnxruntime-genai
dynamic library in Xcode. -
c. Use the C Samples code for testing. You can also add additional features like ChatUI for more functionality.
-
d. Since you need to use C++ in your project, rename
ViewController.m
toViewController.mm
pour activer la prise en charge d'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;
Une fois la configuration terminée, vous pouvez exécuter l'application pour voir les résultats de l'inférence du modèle Phi-3-mini.
Pour plus d'exemples de code et des instructions détaillées, visitez le répertoire d'exemples Phi-3 Mini.
Avertissement :
Ce document a été traduit à l'aide du service de traduction automatique Co-op Translator. Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.