On parle beaucoup d’IA et de LLM. Sachez que l’IBM i n’est pas en reste ! Il est possible de faire tourner des LLM localement sur notre IBM i.
Cela est rendu accessible grâce à un package open source : llama-cpp.
Llama CPP (Llama C++) est un outil qui facilite l’inférence avec un LLM. C’est bien beau mais l’inférence, qu’est-ce que c’est ?
Il s’agit de l’interrogation d’un modèle, quand on interroge un LLM (et qu’il nous répond, c’est mieux…) il s’agit d’inférence !
Llama CPP est un logiciel Open Source conçu pour être universel : il est censé s’intégrer facilement quel que soit son environnement.
Voyons voir comment l’intégrer sur un IBM i.
Un package RPM
Qui dit open source sur l’IBM i dit package RPM et dit YUM. Disponible dans le repo de base IBM, il est compatible pour les versions 7.3 et +.
Pour l’installer, on peut choisir notre mode favori :
En ligne de commande :
yum install llama-cpp
Ou depuis le gestionnaire de package open source d’ACS :
L’affaire est réglée ! On peut vérifier que tout fonctionne avec : llama-cli –help
Si ça ne fonctionne pas, vérifier que le PATH contient bien : /QOpenSys/pkgs/bin
Le modèle
On a notre Llama.cpp, il ne nous manque « plus que » le modèle, le LLM avec qui on va interagir.
Pour cela, on est assez limité, il faut trouver un modèle compatible avec l’IBM i, on trouve ce repo Hugging Face qui les liste :
https://huggingface.co/models-for-i
Il suffit d’en télécharger un sur notre IBM i. On peut le faire par exemple en SSH avec curl :
curl -L -o Llama-3.2-1B-Instruct-f32-be.gguf \
https://huggingface.co/models-for-i/Llama-3.2-1B-Instruct/resolve/main/Llama-3.2-1B-Instruct-f32-be.gguf
On retrouve ce lien dans l’onglet « files and versions » du modèle choisi sur Hugging Face, puis en cliquant sur l’option « copy download link » du modèle choisi.
Et maintenant, le test
On a toutes les briques : llama.cpp, le modèle. Il n’y a plus qu’à tester, pour cela llama-cli –help nous propose la commande suivante :
llama-cli -m your_model.gguf -p « I believe the meaning of life is » -n 128 -no-cnv
On remplace ça par les bonnes informations :
llama-cli -m models/Llama-3.2-1B-Instruct-f32-be.gguf -p « I believe the meaning of life is » -n 128 -no-cnv
Et on attend la réponse !
Si ça fonctionne mais que c’est long : C’est parce que le modèle est en float32 (on voit f32 dans le nom du modèle) ce qui est très lourd et qui ne représente pas de gain direct pour de l’inférence.
Petit point, quand on parle de float32, on parle de la précision des paramètres d’un LLM, ce LLM est « petit » : il n’a qu’un milliard de paramètres. Si on baisse la précision de ces paramètres nous allons grandement gagner en vitesse !
Pour cela on « quantize », c’est-à-dire qu’on quantifie en français.
« Quantizer » (ou quantifier) un modèle
Llama CPP permet de quantifier un modèle : On précise le modèle et le niveau de quantification :
llama-quantize models/Llama-3.2-1B-Instruct-f32-be.gguf Llama-3.2-1B-Instruct-Q4_K_M.gguf Q4_K_M
Ici on passe de 32 bits à 4 bits, on réduit donc d’un facteur 8 le nombre de bits par paramètre. C’est souvent ce qui est utilisé pour conserver un bon ratio vitesse/précision.
En relançant la commande, la réponse devrait être beaucoup plus rapide :
llama-cli -m models/Llama-3.2-1B-Instruct-Q4_K_M.gguf -p « I believe the meaning of life is » -n 128 -no-cnv
Pour aller plus loin
L’intérêt de faire tourner un modèle local est le plus souvent lié à des problématiques de confidentialité. En effet, tout ce qui est demandé localement à un modèle ne sortira jamais de ce cadre.
L’IBM i étant connu et reconnu pour sa robustesse et sa sécurité, c’est l’endroit le plus sûr pour nos données. Donc faire tourner un modèle en local sur notre IBM i est la manière la plus sûre de contrôler nos données.
On peut aussi lancer un serveur en utilisant le modèle. Pour cela Llama cpp nous fournit llama-server, un serveur HTTP léger qui permet d’exécuter localement des modèles et de les exposer via une API. On doit préciser le nom du modèle et le port :
llama-server -m models/Llama-3.2-1B-Instruct-Q4_K_M.gguf –port 8085
Pour le tester on peut utiliser curl :
curl http://127.0.0.1:8085/v1/chat/completions \
-H « Content-Type: application/json » \
-d ‘{
« messages »: [{« role »: « user », « content »: « Hello »}]
}’
On peut donc imaginer un chatbot entièrement IBM i : sur nos écrans 5250, développé en RPG et utilisant un modèle local !
Cependant les modèles disponibles sur l’IBM i ne sont pas encore très puissants et limités par la puissance accessible. On pourrait les rendre plus performants avec un RAG par exemple.
Le RAG (Retrieval Augmented Generation) est un pattern très répandu dans le monde de l’intelligence artificiel, vous pouvez retrouver un lien vers une présentation de la power-week 2025 sur l’utilisation de ces derniers pour améliorer les performances d’un LLM sur des sujets spécifiques à l’IBM i.
Remerciements
Un grand merci à l’ensemble des contributeurs des projets pour leur travail et leur engagement en faveur de l’ouverture de l’IBM i au monde moderne. Merci aussi à Adam Shedivy pour ces nombreux articles et travaux à propos d’IA sur l’IBM i. Vous pouvez retrouver ici un lien vers son blog.

