Affiner et déployer un LLM open source sur GPU à l'aide des actions rapides Data Science et AI

Introduction

Ce tutoriel vous explique comment utiliser le service Oracle Cloud Infrastructure (OCI) Data Science pour affiner un LLM open source à l'aide de la fonctionnalité d'actions rapides d'IA fournie par Data Science. Avec la facilité de pointer-cliquer, vous utiliserez les actions rapides de l'IA pour affiner un LLM Mistral fourni par Hugging Face, ce LLM affiné sur une FAQ publiée par NVIDIA. Les actions rapides d'IA sont ensuite utilisées pour déployer ce modèle réglé dans OCI sur une forme de GPU A10. Le code Python exécuté dans un bloc-notes Jupyter est ensuite utilisé pour montrer que la sortie du modèle réglé a le style et le ton souhaités qui sont similaires aux données d'entraînement NVIDIA.

Objectifs

Prérequis

Tâche 1 : provisionner une session de bloc-notes Data Science

  1. Utilisez la console OCI pour créer un projet Data Science.

  2. Accédez à ce projet et créez une session de bloc-notes Data Science comportant au moins deux ECPU.

  3. Ouvrez cette session de bloc-notes et cliquez sur Etendre.

  4. Démarrez une session de terminal dans Data Science.

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

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

    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 sur https://huggingface.co.

  2. Accédez à votre compte Hugging Face > Jetons d'accès et créez un jeton d'accès utilisateur pour lequel les droits d'accès suivants sont cochés :

    • Lire l'accès 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 auxquels vous pouvez accéder
  3. Utilisez une session de terminal Data Science pour journaliser votre jeton d'accès utilisateur avec Hugging Face :

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

Tâche 3 : création d'un bucket Object Storage

Créez un bucket Object Storage dans la même région et le même compartiment que le bloc-notes Data Science.

Tâche 4 : configurer la journalisation

Créer un groupe de journaux, puis Créer un journal personnalisé

Tâche 5 : utiliser les actions rapides d'IA de Data Science pour déployer le LLM sur la forme de GPU A10, sans réglage fin

  1. Accédez à Classeur Data Science > Lanceur > Actions rapides AI.

    a. Recherchez les modèles Mistral
    b. Cliquez sur la mosaïque 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 de modèle terminé, accédez à Déploiements > <votre modèle récemment déployé> > Tester votre modèle et testez-le à l'aide de 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 répond plutôt bien à 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 l'adresse du modèle déployé

  1. Accédez à Déploiements > <votre modèle qui vient d'être déployé> Appeler votre modèle pour voir l'adresse de votre modèle déployé. Utilisez ensuite le terminal Data Science pour stocker cette adresse en tant que variable shell. Exemple :

    endpoint=https://modeldeployment.<region>.oci.customer-oci.com/<model_ocid>/predict
    
  2. Envoyez une invite à l'adresse 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 l'adresse 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. Accédez à Déploiements > <votre modèle récemment déployé> > Journal pour afficher le trafic qui vient d'être envoyé à l'adresse du modèle.

img.png

Description de l'illustration log_traffic.png

Tâche 7 : utiliser les actions rapides d'IA pour affiner un LLM

La tâche précédente a déployé un LLM Mistral sans affinage. Cette tâche affine et déploie le même LLM. La tâche 9 compare les sorties des deux modèles, réglées et non réglées. Cette tâche et la suivante utilisent également deux blocs-notes Jupyter téléchargés à partir de cette archive de code.

  1. Utilisez le navigateur de fichiers du bloc-notes Data Science pour accéder au dossier quick-actions-demo-archive et ouvrir le bloc-notes Jupyter prep_data.ipynb.

  2. Sélectionnez le noyau generalml_p311_cpu_x86_64_v1.

  3. Révisez le dernier paragraphe du bloc-notes afin qu'il fasse référence à votre location/espace de noms et à votre bucket Object Storage.

  4. Exécutez le bloc-notes Jupyter prep_data.ipynb, qui :

    • Lisez la FAQ NVIDIA à partir du fichier data/NvidiaDocumentationQandApairs.csv
    • refonte de la FAQ CSV en tant qu'enregistrements JSON comportant les champs prompt et completion attendus par les actions rapides d'IA.
    • effectuer un fractionnement de 90:10 de ces données en échantillons train:test.
    • propagez l'exemple d'entraînement dans le fichier quick_actions/tuning_data/tune_sample.jsonl dans Object Storage.
  5. Accédez à Actions rapides AI > Modèles > mistralai/Mistral-7B-Instruct-v0.3. Cliquez ensuite sur Affiner le réglage avec les paramètres suivants :

    • Chemin Object Storage = quick_actions/tuning_data/tune_sample.jsonl
    • fractionnement de validation = 20%
    • résultats Object Storage : chemin = quick_actions/tuning_results
    • shape = BM.GPU.A10.4 s'il existe une disponibilité. Sinon, utilisez des 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 les paramètres suivants :

    • batch_size = 64
    • sequence_len = 256
    • learning_rate = 0.000025
    • epochs = 12
  7. Le réglage fin prend environ 60 minutes sur un A10.2. Cliquez donc sur Ouvrir les journaux dans le terminal pour surveiller les journaux du travail de réglage fin.

  8. Affichez la courbe d'apprentissage du modèle affiné dans la section Mesures. Un modèle bien réglé 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. Accédez à Actions rapides d'IA > Modèles affinés > <votre modèle affiné> > 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 d'un LLM affiné

  1. Une fois le déploiement de modèle terminé, accédez à Déploiements > <votre modèle ajusté> > Tester votre modèle et testez-le à l'aide des questions des exemples de test qui sont affichés dans le bloc-notes prep_data.ipynb, par exemple :

    What benefits does Unified Memory bring to complex data structures and classes?
    
    
  2. Copiez/collez l'adresse du modèle dans la variable shell de votre session de terminal :

    endpoint=https://modeldeployment.<region>.oci.customer-oci.com/<model_ocid>/predict
    
  3. Envoyez une invite à l'adresse 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 l'adresse de 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 affiné/déployé pour visualiser le trafic récent sur l'adresse de ce modèle

  6. Ouvrez le bloc-notes Jupyter compare_models.ipynb et mettez à jour le paragraphe [8] pour faire référence aux adresses de vos deux modèles, réglées et non réglées.

  7. Exécutez ce bloc-notes, qui :

    • Lisez l'exemple de test des enregistrements FAQ.
    • Utilisez python pour alimenter cinq questions de test dans les points d'extrémité du modèle affiné et non réglé, et comparer leurs réponses.
    • Notez le paragraphe [10] qui illustre comment appeler l'adresse d'un modèle déployé à l'aide de 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 un ton, un style et une longueur assez similaires aux réponses actuelles de la FAQ NVIDIA.
    • Les réponses du LLM non réglées sont beaucoup plus détaillées et incluent de nombreuses instructions étrangères qui sont probablement incorrectes.
    • Les réponses du LLM affiné par rapport au LLM non réglé sont incorrectes le plus souvent, et à peu près également.
    • Le réglage fin sur un ensemble de données beaucoup plus important augmenterait probablement la précision de ses réponses.

Tâche 10 : supprimer les ressources

  1. Accédez à Actions rapides d'IA > Déploiements et supprimez vos déploiements de modèle.

  2. Accédez à Actions rapides AI > Modèles > Modèles affinés et supprimez-les.

  3. Utilisez la page de console OCI pour accéder à votre session de bloc-notes Data Science et Mettre fin.

  4. Cliquez sur Travaux et supprimez vos travaux de réglage fin.

  5. Supprimez votre projet Data Science.

  6. Utilisez la page de console OCI pour accéder au bucket Object Storage et le supprimer.

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

Accusés de réception

Ressources de formation supplémentaires

Explorez d'autres ateliers sur le site docs.oracle.com/learn ou accédez à d'autres contenus d'apprentissage gratuits sur le canal Oracle Learning YouTube. En outre, visitez le site education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

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