Un environnement entièrement confiné et prêt à l'emploi pour affiner le modèle Llama 3 avec un ensemble de données personnalisé et exécuter des inférences sur les modèles affinés
Remarque : jusqu'à présent, ceci est testé uniquement sur les GPU NVIDIA RTX 2080 et NVIDIA Tesla T4. Il n'a pas été testé avec les autres classes de GPU ou sur les CPU.
Exécutez cette commande sur votre machine hôte pour vérifier quel GPU Nvidia vous avez installé.
nvidia-smi
Cela devrait afficher les informations de votre GPU.
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.171.04 Driver Version: 535.171.04 CUDA Version: 12.2 |
| -----------------------------------------+----------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
| =========================================+======================+====================== |
| 0 NVIDIA GeForce RTX 2080 Off | 00000000:01:00.0 On | N/A |
| 22% 38C P8 17W / 215W | 197MiB / 8192MiB | 0% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
git clone https://github.com/amithkoujalgi/llama3-playground.git
cd llama3-playground
bash build.sh
bash run.sh
Cela démarre le conteneur Docker avec les services suivants.
Service | Point de terminaison accessible de l’extérieur | Port interne | Description |
---|---|---|---|
Superviseur | http://localhost:8884 | 9001 | Pour exécuter une formation sur un ensemble de données personnalisé et afficher les journaux du processus d'entraînement |
Serveur FastAPI | http://localhost:8883/docs | 8070 | Pour accéder aux API du serveur de modèles |
Serveur JupyterLab | http://localhost:8888/lab | 8888 | Accédez à l'interface JupyterLab pour parcourir le conteneur et mettre à jour/expérimenter le code |
Remarque : Tous les processus (OCR, formation et inférence) utilisent le GPU et si plusieurs processus de n'importe quel type étaient exécutés simultanément, nous rencontrerions des problèmes de manque de mémoire (MOO). Pour gérer cela, le système a été conçu pour exécuter un seul processus à un moment donné. (c'est-à-dire qu'une seule instance d'OCR, de formation ou d'inférence peut être exécutée à la fois)
N'hésitez pas à mettre à jour le code en fonction de vos besoins.
Allez au terminal et tapez
playground --train
Allez au terminal et tapez
playground -l
Cela produit des modèles sous /app/data/trained-models/
. Le script du formateur produit 2 modèles :
lora-adapters
.Exécutez l'OCR :
cd /app/llama3_playground/core
python ocr.py
-f " /app/sample.pdf "
Pour comprendre ce que signifient les options, accédez à JupyterLab et exécutez python ocr.py -h
Inférence avec RAG :
cd /app/llama3_playground/core
python infer_rag.py
-m " llama-3-8b-instruct-custom-1720802202 "
-d " /app/data/ocr-runs/123/text-result.txt "
-q " What is the employer name, address, telephone, TIN, tax year end, type of business, plan name, Plan Sequence Number, Trust ID, Account number, is it a new plan or existing plan as true or false, are elective deferrals and roth deferrals allowed as true or false, are loans permitted as true or false, are life insurance investments permitted and what is the ligibility Service Requirement selected? "
-t 256
-e " Alibaba-NLP/gte-base-en-v1.5 "
-p " There are checkboxes in the text that denote the value as selected if the text is [Yes], and unselected if the text is [No]. The checkbox option's value can either be before the selected value or after. Keep this in context while responding and be very careful and precise in picking these values. Always respond as JSON. Keep the responses precise and concise. "
Pour comprendre ce que signifient les options, accédez à JupyterLab et exécutez python infer_rag.py -h
Cela serait nécessaire si NVIDIA Container Toolkit n’est pas installé sur votre machine hôte.
# Configure the production repository
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list |
sed ' s#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g ' |
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
# Optionally, configure the repository to use experimental packages
sed -i -e ' /experimental/ s/^#//g ' /etc/apt/sources.list.d/nvidia-container-toolkit.list
# Update the packages list from the repository
sudo apt-get update
# Install the NVIDIA Container Toolkit packages
sudo apt-get install -y nvidia-container-toolkit
Pour les autres environnements, reportez-vous à ceci.
curl --silent -X ' POST '
' http://localhost:8883/api/infer/sync/ctx-text '
-H ' accept: application/json '
-H ' Content-Type: application/json '
-d ' {
"model_name": "llama-3-8b-instruct-custom-1720690384",
"context_data": "You are a magician who goes by the name Magica",
"question_text": "Who are you?",
"prompt_text": "Respond in a musical and Shakespearean tone",
"max_new_tokens": 50
} ' | jq -r " .data.response "
curl -X ' POST '
' http://localhost:8883/api/ocr/sync/pdf '
-H ' accept: application/json '
-H ' Content-Type: multipart/form-data '
-F ' file=@your_file.pdf;type=application/pdf '
true
si un processus OCR est en cours d'exécution, false
sinon. curl -X ' GET '
' http://localhost:8883/api/ocr/status '
-H ' accept: application/json '
Références :