Feinabstimmung und Bereitstellung eines Open-Source-LLM auf GPU mit Data Science und KI-Schnellaktionen

Einführung

In diesem Tutorial erfahren Sie, wie Sie mit dem Oracle Cloud Infrastructure (OCI) Data Science-Service ein Open-Source-LLM mit der KI-Schnellaktionen-Funktionalität optimieren, die von Data Science bereitgestellt wird. Mit Point-and-Click-Benutzerfreundlichkeit können Sie KI-Schnellaktionen verwenden, um ein Mistral-LLM von Hugging Face zu optimieren, wobei dieses LLM auf eine von NVIDIA veröffentlichte FAQ abgestimmt ist. AI Quick Actions wird dann verwendet, um dieses optimierte Modell in OCI auf einer A10-GPU-Ausprägung bereitzustellen. Python-Code, der in einem Jupyter-Notebook ausgeführt wird, wird dann verwendet, um zu zeigen, dass die Ausgabe des optimierten Modells den gewünschten Stil und Ton aufweist, der den NVIDIA-Trainingsdaten ähnelt.

Ziele

Voraussetzungen

Aufgabe 1: Data Science-Notizbuchsession bereitstellen

  1. Verwenden Sie die OCI-Konsole, um ein Data Science-Projekt zu erstellen.

  2. Navigieren Sie zu diesem Projekt, und erstellen Sie eine Data Science-Notizbuchsession mit zwei oder mehr ECPUs.

  3. Öffnen Sie diese Notizbuchsession, und klicken Sie auf Erweitern.

  4. Terminal Session in Data Science starten

  5. Mit diesem Terminal können Sie ein Github-Repository klonen, das die Jupyter-Notizbücher enthält, die von diesem Tutorial verwendet werden:

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

    git clone https://huggingface.co/datasets/ajsbsd/nvidia-qa
    
    
  7. Kopieren Sie die NVIDIA FAQ in das Datenverzeichnis des ersten Repositorys

    cp nvidia-qa/NvidiaDocumentationQandApairs.csv quick-actions-demo-archive/data/.
    
    
  8. Installieren und aktivieren Sie dann die Conda-Umgebung 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. Installieren Sie LangChain pro 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"
    

Aufgabe 2: Hugging Face-Konto einrichten

  1. Erstellen Sie ein Hugging Face-Konto unter https://huggingface.co.

  2. Navigieren Sie zu Ihrem Hugging Face-Konto > Zugriffstoken, und erstellen Sie ein neues Benutzerzugriffstoken, für das die folgenden Berechtigungen aktiviert sind:

    • Lesezugriff auf Inhalte aller Repos unter Ihrem persönlichen Namespace
    • Lesezugriff auf die Inhalte aller Public Gated Repositorys, auf die Sie zugreifen können
  3. Verwenden Sie eine Data Science-Terminalsession, um Ihr Benutzerzugriffstoken mit Hugging Face zu protokollieren:

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

Aufgabe 3: Objektspeicher-Bucket erstellen

Erstellen Sie einen Object Storage-Bucket in derselben Region und demselben Compartment wie das Data Science-Notizbuch.

Aufgabe 4: Logging einrichten

Erstellen Sie eine Loggruppe, Benutzerdefiniertes Log erstellen

Aufgabe 5: KI-Schnellaktionen von Data Science verwenden, um LLM auf A10-GPU-Ausprägung bereitzustellen, ohne Feinabstimmung

  1. Navigieren Sie zu Data Science-Notizbuch > Launcher > KI-Schnellaktionen.

    a. Suchen Sie nach den Mistral-Modellen
    b. Klicken Sie auf die Kachel mistralai/Mistral-7B-Instruct-v0.3
    c. Klicken Sie auf Bereitstellen, wobei das obige Log ausgewählt ist

  2. Die Modellbereitstellung dauert etwa 15 Minuten. Sie können das Deployment-Log überwachen, indem Sie Logs in Terminal öffnen auswählen.

  3. Navigieren Sie nach Abschluss des Modell-Deployments zu Deployments > <Ihr gerade bereitgestelltes Modell> > Modell testen, und testen Sie dieses Modell mit einfachen Fragen, wie:

    Who wrote the Harry Potter book series?
    
    
  4. Einige einfache LLMs können die folgenden Testfragen nicht richtig beantworten, aber Mistral-7B-Instruct-v0.3 erledigt die Beantwortung dieser Fragen ziemlich gut:

    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? 
    

Aufgabe 6: Mit dem Endpunkt des bereitgestellten Modells interagieren

  1. Navigieren Sie zu Deployments > <Ihr gerade bereitgestelltes Modell> Rufen Sie Ihr Modell auf, um den Endpunkt des bereitgestellten Modells anzuzeigen. Speichern Sie diesen Endpunkt dann mit dem Data Science-Terminal als Shell-Variable. Beispiel:

    endpoint=https://modeldeployment.<region>.oci.customer-oci.com/<model_ocid>/predict
    
  2. Eine Eingabeaufforderung an den Endpunkt des bereitgestellten Modells senden:

    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. Mit dieser bash-Schleife können Sie den Endpunkt des Modells 100 Mal in zehn Sekunden aufrufen:

    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. Navigieren Sie zu Deployments > <Ihr gerade bereitgestelltes Modell> > Log, um den Traffic anzuzeigen, der gerade an den Endpunkt des Modells gesendet wurde.

img.png

Beschreibung der Abbildung log_traffic.png

Aufgabe 7: KI-Schnellaktionen zur Feinabstimmung eines LLM verwenden

Die vorherige Aufgabe hat ein Mistral-LLM ohne Feinabstimmung bereitgestellt. Diese Aufgabe optimiert und stellt dann dasselbe LLM bereit. Aufgabe 9 vergleicht die Ausgaben beider Modelle, optimiert und nicht optimiert. Bei dieser und der nächsten Aufgabe werden auch zwei Jupyter-Notizbücher verwendet, die aus diesem Codearchiv heruntergeladen wurden.

  1. Navigieren Sie mit dem Dateibrowser des Data Science-Notizbuchs zum Ordner quick-actions-demo-archive, und öffnen Sie das Jupyter-Notizbuch prep_data.ipynb.

  2. Wählen Sie den Kernel generalml_p311_cpu_x86_64_v1 aus.

  3. Ändern Sie den zweiten Absatz des Notizbuchs, sodass er sich auf Ihren Mandanten/Namespace und Ihren Object Storage-Bucket bezieht.

  4. Führen Sie das Jupyter-Notizbuch prep_data.ipynb aus:

    • Lesen Sie die NVIDIA FAQ aus Datei data/NvidiaDocumentationQandApairs.csv
    • Konvertieren Sie die häufig gestellten Fragen zur CSV-Datei in JSON-Datensätze mit den Feldern prompt und completion, die von KI-Schnellaktionen erwartet werden.
    • eine 90:10-Aufteilung dieser Daten in train:test-Beispiele durchführen.
    • Übertragen Sie das Schulungsbeispiel in die Datei quick_actions/tuning_data/tune_sample.jsonl in Object Storage.
  5. Navigieren Sie zu KI-Schnellaktionen > Modelle > mistralai/Mistral-7B-Instruct-v0.3. Klicken Sie dann mit den folgenden Einstellungen auf Fein optimieren:

    • Object Storage-Pfad = quick_actions/tuning_data/tune_sample.jsonl
    • Validierungsaufteilung = 20%
    • Ergebnisse Object Storage-Pfad = quick_actions/tuning_results
    • Ausprägung = BM.GPU.A10.4, wenn Verfügbarkeit vorhanden ist. Verwenden Sie andernfalls die Ausprägungen 10.2 oder 10.1
    • Loggruppe und Log auswählen
  6. Aktivieren Sie Erweiterte Konfigurationen anzeigen mit den folgenden Einstellungen:

    • batch_size = 64
    • sequence_len = 256
    • learning_rate = 0.000025
    • epochs = 12
  7. Die Feinabstimmung in A10.2 dauert etwa 60 Minuten. Klicken Sie daher auf Logs in Terminal öffnen, um die Logs des Feinabstimmungsjobs zu überwachen.

  8. Zeigen Sie die Lernkurve des optimierten Modells im Abschnitt Metriken an. Ein gut abgestimmtes Modell wird eine Validierungsverlustkurve haben, die abfällt und dann mit zunehmender Epoche ansteigt. img.png

Beschreibung der Abbildung learning_curve.png

Aufgabe 8: Optimiertes LLM bereitstellen

  1. Navigieren Sie zu KI-Schnellaktionen > Fein optimierte Modelle > <Ihr gerade optimiertes Modell> > Bereitstellen mit den folgenden Einstellungen:

    • Compute-Ausprägung = VM.GPU.A10.1
    • Loggruppe und Log auswählen
  2. Klicken Sie auf Logs in Terminal öffnen, um das Deployment-Log zu überwachen

Aufgabe 9: Deployment des optimierten LLM testen

  1. Navigieren Sie nach Abschluss des Modell-Deployments zu Deployments > <Ihr gerade optimiertes Modell> > Ihr Modell testen, und testen Sie es anhand von Fragen aus den Testbeispielfragen, die im prep_data.ipynb-Notizbuch angezeigt werden. Beispiel:

    What benefits does Unified Memory bring to complex data structures and classes?
    
    
  2. Kopieren Sie den Endpunkt des Modells, oder fügen Sie ihn in die Shell-Variable der Terminalsession ein:

    endpoint=https://modeldeployment.<region>.oci.customer-oci.com/<model_ocid>/predict
    
  3. Eine Eingabeaufforderung an den Endpunkt des bereitgestellten Modells senden:

    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. Mit dieser bash-Schleife können Sie den Modellendpunkt 100-mal aufrufen:

    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. Klicken Sie auf das Log des optimierten/bereitgestellten Modells, um den letzten Traffic in den Endpunkt dieses Modells anzuzeigen

  6. Öffnen Sie das compare_models.ipynb Jupyter-Notizbuch, und aktualisieren Sie Absatz [8], um auf die Endpunkte für Ihre beiden Modelle zu verweisen, optimiert und nicht optimiert.

  7. Führen Sie dieses Notizbuch aus:

    • Lesen Sie das Testbeispiel der FAQ-Datensätze.
    • Mit python können Sie fünf Testfragen in die Endpunkte des optimierten und nicht optimierten Modells einspeisen und deren Antworten vergleichen.
    • Beachten Sie Absatz [10], in dem dargestellt wird, wie der Endpunkt eines bereitgestellten Modells mit python aufgerufen wird. Dies ist ganz einfach: img.png

      Beschreibung der Abbildung call_endpoint.png

  8. Prüfen Sie die wichtigsten Ergebnisse aus diesem Test:

    • Die fein abgestimmten LLM-Antworten haben einen Ton, Stil und eine Länge, die den tatsächlichen NVIDIA-komponierten FAQ-Antworten ziemlich ähnlich ist.
    • Die unoptimierten LLM-Antworten sind viel ausführlicher und enthalten viele irrelevante Aussagen, die wahrscheinlich falsch sind.
    • Antworten aus dem fein abgestimmten und nicht optimierten LLM sind öfter falsch als nicht, und etwa gleich.
    • Die Feinabstimmung auf ein viel größeres Dataset würde wahrscheinlich die Genauigkeit seiner Antworten erhöhen.

Aufgabe 10: Ressourcen löschen

  1. Navigieren Sie zu KI-Schnellaktionen > Deployments, und löschen Sie Ihre Modell-Deployments.

  2. Navigieren Sie zu KI-Schnellaktionen > Modelle > Fein abgestimmte Modelle, und löschen Sie sie.

  3. Auf der OCI-Konsolenseite können Sie zu Ihrer Data Science-Notizbuchsession navigieren und Beenden.

  4. Klicken Sie auf Jobs, und löschen Sie Ihre Optimierungsjobs.

  5. Löschen Sie Ihr Data Science-Projekt.

  6. Auf der OCI-Konsolenseite können Sie zu Ihrem Object Storage-Bucket navigieren und ihn löschen.

  7. Verwenden Sie die OCI-Konsole, um Ihre Log- und Loggruppe zu löschen.

Bestätigungen

Weitere Lernressourcen

Sehen Sie sich weitere Übungen zu docs.oracle.com/learn an, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube-Kanal zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um ein Oracle Learning Explorer zu werden.

Die Produktdokumentation finden Sie im Oracle Help Center.