Ajuster et déployer un LLM à code source libre sur GPU à l'aide d'actions rapides de science des données et d'intelligence artificielle

Présentation

Ce tutoriel vous guide tout au long de l'utilisation du service de science des données pour Oracle Cloud Infrastructure (OCI) afin d'affiner un LLM à code source libre à l'aide de la fonctionnalité Actions rapides de l'IA fournie par le service de science des données. Avec la facilité de pointer-cliquer, vous utiliserez AI Quick Actions pour affiner un LLM Mistral fourni par Hugging Face, avec ce LLM affiné sur une FAQ publiée par NVIDIA. AI Quick Actions est ensuite utilisé pour déployer ce modèle réglé dans OCI sur une forme de processeur graphique A10. Le code Python s'exécutant dans un carnet Jupyter est ensuite utilisé pour montrer que la sortie du modèle réglé a le style et la tonalité souhaités, similaires aux données d'entraînement NVIDIA.

Objectifs

Conditions requises

Tâche 1 : Provisionner une session de carnet du service de science des données

  1. Utilisez la console OCI pour créer un projet du service de science des données.

  2. Naviguez jusqu'à ce projet et créez une session de carnet du service de science des données comportant au moins deux ECPU.

  3. Ouvrez cette session de carnet et cliquez sur Prolonger.

  4. Démarrez une session de terminal dans le service de science des données.

  5. Utilisez ce terminal pour cloner un référentiel github contenant les carnets Jupyter qui seront utilisés par ce tutoriel :

    git clone https://github.com/oracle-nace-dsai/quick-actions-demo-archive.git
    
  6. Cloner NVIDIA - FAQ :

    git clone https://huggingface.co/datasets/ajsbsd/nvidia-qa
    
    
  7. Copier la FAQ NVIDIA dans le répertoire de données du premier référentiel

    cp nvidia-qa/NvidiaDocumentationQandApairs.csv quick-actions-demo-archive/data/.
    
    
  8. Installez, puis activez l'environnement Conda General Machine Learning for CPUs on Python 3.11 :

    odsc conda install -s generalml_p311_cpu_x86_64_v1 
    conda activate /home/datascience/conda/generalml_p311_cpu_x86_64_v1
    
  9. Installer LangChain par https://github.com/oracle-samples/oci-data-science-ai-samples/blob/main/ai-quick-actions/model-deployment-tips.md#using-python-sdk-without-streaming

    pip install langgraph "langchain>=0.3" "langchain-community>=0.3" "langchain-openai>=0.2.3" "oracle-ads>2.12"
    

Tâche 2 : Configurer un compte Face Hugging

  1. Créez un compte Hugging Face à https://huggingface.co.

  2. Naviguez jusqu'à votre compte Face Hugging > Jetons d'accès et créez un nouveau jeton d'accès utilisateur dont les autorisations sont vérifiées :

    • Accès en lecture au contenu de tous les référentiels sous votre espace de noms personnel
    • Accès en lecture au contenu de tous les référentiels publics sécurisés auxquels vous pouvez accéder
  3. Utilisez une session de terminal du service de science des données pour enregistrer votre jeton d'accès utilisateur avec Hugging Face :

    git config --global credential.helper store
    huggingface-cli login
    
    

Tâche 3 : Créer un compartiment de stockage d'objets

Créez un seau de stockage d'objets dans la même région et le même compartiment que le carnet du service de science des données.

Tâche 4 : Configurer la journalisation

Créez un groupe de journaux, puis créez un journal personnalisé

Tâche 5 : Utiliser les actions rapides de l'IA du service de science des données pour déployer le modèle de langage sur la forme de processeur graphique A10, sans réglage de précision

  1. Naviguez jusqu'au carnet du service de science des données > Lanceur > Actions rapides de l'intelligence artificielle

    a. Recherchez les modèles Mistral
    b. Cliquez sur la vignette mistralai/Mistral-7B-Instruct-v0.3
    c. Cliquez sur Déployer avec le journal ci-dessus sélectionné

  2. Le déploiement du modèle prend environ 15 minutes. Vous pouvez surveiller le journal de déploiement en sélectionnant Ouvrir les journaux dans le terminal.

  3. Une fois le déploiement du modèle terminé, naviguez jusqu'à Déploiements > <votre modèle qui vient d'être déployé> > Tester votre modèle et tester ce modèle avec des questions simples, telles que :

    Who wrote the Harry Potter book series?
    
    
  4. Certains LLM simples peuvent ne pas répondre correctement aux questions de test suivantes, mais Mistral-7B-Instruct-v0.3 fait un assez bon travail pour répondre à ces questions :

    A bat and a ball cost $1.10 in total. The bat costs $1.00 more than the ball. How much does the ball cost?
    Every cat has four legs. My pet has four legs. Is my pet a cat?
    Who is President of the United States? 
    

Tâche 6 : Interagir avec le point d'extrémité du modèle déployé

  1. Naviguez jusqu'à Déploiements > <votre modèle déployé> Appeler votre modèle pour voir le point d'extrémité de votre modèle déployé. Utilisez ensuite le terminal du service de science des données pour stocker ce point d'extrémité en tant que variable d'interpréteur de commandes. Par exemple :

    endpoint=https://modeldeployment.<region>.oci.customer-oci.com/<model_ocid>/predict
    
  2. Envoyez une invite dans le point d'extrémité du modèle déployé :

    prompt="Who is President of the United States?"
    request_body='{"model":"odsc-llm","prompt":"'$prompt'","max_tokens":100,"temperature":0.1,"top_k":50,"top_p":0.99,"stop":[],"frequency_penalty":0,"presence_penalty":0}'
    oci raw-request --http-method POST --target-uri $endpoint --request-body "$request_body" --auth resource_principal
    
  3. Utilisez cette boucle bash pour appeler le point d'extrémité du modèle 100 fois en dix secondes :

    for i in $(seq 1 100); do
         oci raw-request --http-method POST --target-uri $endpoint --request-body "$request_body" --auth resource_principal &
         echo $i
         sleep 0.1
      done
    
    
  4. Naviguez jusqu'à Déploiements > <votre modèle qui vient d'être déployé> > Journal pour voir le trafic qui vient d'être envoyé dans le point d'extrémité du modèle.

img.png

Description de l'illustration log_traffic.png

Tâche 7 : Utiliser des actions rapides de l'IA pour ajuster un LLM

La tâche précédente a déployé un LLM Mistral sans réglage de précision. Cette tâche ajustera, puis déploiera le même LLM. La tâche 9 comparera les sorties des deux modèles, réglées et non réglées. Cette tâche et la suivante utilisent également deux carnets Jupyter qui ont été téléchargés à partir de cette archive de code.

  1. Utilisez le navigateur de fichiers du carnet du service de science des données pour naviguer jusqu'au dossier quick-actions-demo-archive et ouvrir le carnet prep_data.ipynb Jupyter.

  2. Sélectionnez le noyau generalml_p311_cpu_x86_64_v1.

  3. Révisez le deuxième à dernier paragraphe du carnet de sorte qu'il fasse référence à votre location/espace de noms et à votre seau de stockage d'objets.

  4. Exécutez le carnet Jupyter prep_data.ipynb, qui va :

    • Lisez la FAQ NVIDIA à partir du fichier data/NvidiaDocumentationQandApairs.csv
    • refonte de la FAQ CSV en tant qu'enregistrements JSON ayant les champs prompt et completion attendus par les actions rapides de l'intelligence artificielle.
    • effectuer un fractionnement 90:10 de ces données en échantillons train:test.
    • poussez l'exemple d'entraînement dans le fichier quick_actions/tuning_data/tune_sample.jsonl du service de stockage d'objets.
  5. Naviguez jusqu'à Actions rapides de l'IA > Modèles > mistralai/Mistral-7B-Instruct-v0.3. Cliquez ensuite sur Ajuster avec les paramètres suivants :

    • Chemin du stockage d'objets = quick_actions/tuning_data/tune_sample.jsonl
    • Fractionnement de validation = 20%
    • résultats Chemin du stockage d'objets = quick_actions/tuning_results
    • shape = BM.GPU.A10.4 si disponibilité existe. Sinon, utilisez les formes 10.2 ou 10.1
    • sélectionnez votre groupe de journaux et votre journal
  6. Activez l'option Afficher les configurations avancées avec ces paramètres :

    • batch_size = 64
    • sequence_len = 256
    • learning_rate = 0.000025
    • epochs = 12
  7. Le réglage de précision prend environ 60 minutes sur une A10.2. Cliquez donc sur Ouvrir les journaux dans le terminal pour surveiller les journaux de la tâche de réglage de précision.

  8. Consultez la courbe d'apprentissage du modèle affiné dans la section Mesures. Un modèle bien ajusté aura une courbe de perte de validation qui descend, puis des plateaux avec une époque croissante. img.png

Description de l'illustration learning_curve.png

Tâche 8 : Déployer le LLM affiné

  1. Naviguez jusqu'à Actions rapides de l'IA > Modèles réglés avec précision > <votre modèle ajusté> > Déployer avec les paramètres suivants :

    • Forme de calcul = VM.GPU.A10.1
    • Sélectionnez votre groupe de journaux et votre journal
  2. Cliquez sur Ouvrir les journaux dans le terminal pour surveiller le journal de déploiement

Tâche 9 : Tester le déploiement du LLM affiné

  1. Une fois le déploiement du modèle terminé, naviguez jusqu'à Déploiements > <votre modèle ajusté> > Tester votre modèle et le tester à l'aide des questions des exemples de questions de test affichés dans le carnet prep_data.ipynb, telles que :

    What benefits does Unified Memory bring to complex data structures and classes?
    
    
  2. Copiez/collez le point d'extrémité du modèle dans la variable d'interpréteur de commandes de votre session de terminal :

    endpoint=https://modeldeployment.<region>.oci.customer-oci.com/<model_ocid>/predict
    
  3. Envoyez une invite dans le point d'extrémité du modèle déployé :

    prompt="What benefits does Unified Memory bring to complex data structures and classes?"
    request_body='{"model":"odsc-llm","prompt":"'$prompt'","max_tokens":100,"temperature":0.1,"top_k":50,"top_p":0.99,"stop":[],"frequency_penalty":0,"presence_penalty":0}'
    oci raw-request --http-method POST --target-uri $endpoint --request-body "$request_body" --auth resource_principal
    
  4. Utilisez cette boucle bash pour appeler le point d'extrémité du modèle 100 fois :

    for i in $(seq 1 100); do
       oci raw-request --http-method POST --target-uri $endpoint --request-body "$request_body" --auth resource_principal &
       echo $i
       sleep 0.1
    done
    
  5. Cliquez sur le journal du modèle ajusté/déployé pour voir le trafic récent vers le point d'extrémité de ce modèle

  6. Ouvrez le carnet Jupyter compare_models.ipynb et mettez à jour le paragraphe [8] pour faire référence aux points d'extrémité de vos deux modèles, réglés et non réglés.

  7. Exécutez ce carnet, qui :

    • Lisez l'exemple de test des enregistrements de FAQ.
    • Utilisez python pour alimenter cinq questions de test dans les points d'extrémité du modèle affiné et non ajusté, et comparer leurs réponses.
    • Note paragraphe [10] qui illustre comment appeler le point d'extrémité d'un modèle déployé en utilisant python, ce qui est assez simple : img.png

      Description de l'illustration call_endpoint.png

  8. Examinez les principales conclusions de ce test :

    • Les réponses du LLM affinées ont une tonalité, un style et une longueur assez similaires aux réponses de FAQ réelles composées par NVIDIA.
    • Les réponses du LLM non ajusté sont beaucoup plus verbose et comprennent de nombreuses déclarations étrangères qui sont probablement incorrectes.
    • Les réponses du LLM affiné par rapport au LLM non affiné sont incorrectes le plus souvent, et à peu près de la même manière.
    • Le réglage fin sur un ensemble de données beaucoup plus grand augmenterait probablement la précision de ses réponses.

Tâche 10 : Supprimer les ressources

  1. Naviguez jusqu'à Actions rapides de l'IA > Déploiements et supprimez vos déploiements de modèle.

  2. Naviguez jusqu'à Actions rapides de l'IA > Modèles > Modèles ajustés et supprimez-les.

  3. Utilisez la page de la console OCI pour naviguer jusqu'à votre session de carnet du service de science des données et Mettre fin.

  4. Cliquez sur Tâches et supprimez vos tâches de réglage de précision.

  5. Supprimer votre projet de science des données.

  6. Utilisez la page de la console OCI pour naviguer jusqu'au seau de stockage d'objets et le supprimer.

  7. Utilisez la console OCI pour supprimer votre journal et votre groupe de journaux.

Remerciements

Ressources d'apprentissage supplémentaires

Explorez d'autres laboratoires sur le site docs.oracle.com/learn ou accédez à plus de contenu d'apprentissage gratuit sur le canal Oracle Learning YouTube. De plus, visitez education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour obtenir la documentation sur le produit, visitez Oracle Help Center.