Ajuste e Implemente um LLM de Código Aberto em GPU usando Ciência de Dados e Ações Rápidas de IA

Introdução

Este tutorial orienta você sobre como usar o serviço Data Science da Oracle Cloud Infrastructure (OCI) para ajustar um LLM de código aberto usando a funcionalidade Ações Rápidas de IA fornecida pelo Data Science. Com a facilidade de apontar e clicar, você usará o AI Quick Actions para ajustar um LLM Mistral fornecido pela Hugging Face, com esse LLM ajustado em uma FAQ publicada pela NVIDIA. O AI Quick Actions é usado para implantar esse modelo ajustado na OCI em uma forma de GPU A10. O código Python em execução em um notebook Jupyter é usado para mostrar que a saída do modelo ajustado tem o estilo e o tom desejados semelhantes aos dados de treinamento da NVIDIA.

Objetivos

Pré-requisitos

Tarefa 1: Provisionar uma Sessão de Notebook do Serviço Data Science

  1. Usar a console do OCI para criar um Projeto do Data Science.

  2. Navegue até esse Projeto e crie uma sessão de notebook do Data Science com duas ou mais ECPUs.

  3. Abra essa sessão de notebook e clique em Estender.

  4. Inicie uma sessão de terminal no Data Science.

  5. Use esse terminal para clonar um repositório github contendo os notebooks Jupyter que serão usados por este tutorial:

    git clone https://github.com/oracle-nace-dsai/quick-actions-demo-archive.git
    
  6. Clonar Perguntas Frequentes sobre NVIDIA:

    git clone https://huggingface.co/datasets/ajsbsd/nvidia-qa
    
    
  7. Copiar as Perguntas Frequentes da NVIDIA para o primeiro diretório de dados do repositório

    cp nvidia-qa/NvidiaDocumentationQandApairs.csv quick-actions-demo-archive/data/.
    
    
  8. Instale e ative o 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. Instalar LangChain por 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"
    

Tarefa 2: Configurar uma Conta Face de Abertura

  1. Crie uma conta Hugging Face em https://huggingface.co.

  2. Navegue até sua conta Hugging Face > Tokens de Acesso e crie um novo Token de Acesso do Usuário com estas permissões marcadas:

    • Leia o acesso ao conteúdo de todos os repositórios sob seu namespace pessoal
    • Leia o acesso ao conteúdo de todos os repositórios de acesso público que você pode acessar
  3. Use uma sessão de terminal do Data Science para registrar seu Token de Acesso do Usuário com o Hugging Face:

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

Tarefa 3: Criar um Bucket de Armazenamento de Objetos

Crie um bucket do Object Storage na mesma região e compartimento do notebook do Data Science.

Tarefa 4: Configurar Registro em Log

Crie um Grupo de Logs e, em seguida, Criar Log Personalizado

Tarefa 5: Usar Ações Rápidas de IA do Serviço Data Science para Implantar LLM na Forma da GPU A10, sem Ajuste Detalhado

  1. Navegue até Data Science Notebook > Iniciador > Ações Rápidas de IA

    a. Procure os modelos Mistral
    b. Clique no bloco mistralai/Mistral-7B-Instruct-v0.3
    c. Clique em Implantar com o Log acima selecionado

  2. A implantação do modelo leva cerca de 15 minutos. Você pode monitorar o log de implantação selecionando Abrir logs no terminal.

  3. Após a conclusão da implantação do modelo, navegue até Implantações > <seu modelo recém-implantado> > Testar seu modelo e testar esse modelo com perguntas simples, como:

    Who wrote the Harry Potter book series?
    
    
  4. Alguns LLMs simples podem não responder às seguintes perguntas de teste corretamente, mas o Mistral-7B-Instruct-v0.3 faz um trabalho bastante bom ao responder a estas perguntas:

    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? 
    

Tarefa 6: Interagir com o Ponto Final do Modelo Implantado

  1. Navegue até Implantações > <seu modelo recém-implantado> Chamar seu modelo para ver o ponto final do modelo implantado. Em seguida, use o terminal do Data Science para armazenar esse ponto final como uma variável de shell. Por exemplo:

    endpoint=https://modeldeployment.<region>.oci.customer-oci.com/<model_ocid>/predict
    
  2. Envie um prompt para o ponto final do modelo implantado:

    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. Use este loop bash para chamar o ponto final do modelo 100 vezes em dez segundos:

    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. Navegue até Implantações > <seu modelo recém-implantado> > Log para exibir esse tráfego recém-enviado para o ponto final do modelo.

img.png

Descrição da ilustração log_traffic.png

Tarefa 7: Usar Ações Rápidas de IA para Ajustar um LLM

A tarefa anterior implantou um LLM Mistral sem ajuste fino. Esta Tarefa ajustará e implantará o mesmo LLM. A tarefa 9 comparará as saídas de ambos os modelos, ajustadas e não ajustadas. Esta Tarefa e a próxima também usam dois notebooks Jupyter que foram baixados deste arquivo de código.

  1. Use o browser de arquivos do notebook do Data Science para navegar até a pasta quick-actions-demo-archive e abrir o notebook prep_data.ipynb Jupyter.

  2. Selecione o kernel generalml_p311_cpu_x86_64_v1.

  3. Revise o segundo para o último parágrafo do notebook para que ele se refira à sua tenancy/namespace e ao seu bucket do Object Storage.

  4. Execute o notebook prep_data.ipynb Jupyter, que executará:

    • leia as FAQ da NVIDIA no arquivo data/NvidiaDocumentationQandApairs.csv
    • reformule as Perguntas mais Frequentes sobre CSV como registros JSON que têm os campos prompt e completion esperados pelas Ações Rápidas de IA.
    • realizar uma divisão 90:10 desses dados em amostras de trem:teste.
    • enviar a amostra de treinamento para o arquivo quick_actions/tuning_data/tune_sample.jsonl no Object Storage.
  5. Navegue até Ações Rápidas de IA > Modelos > mistralai/Mistral-7B-Instruct-v0.3. Em seguida, clique em Ajustar com estas definições:

    • Caminho do Object Storage = quick_actions/tuning_data/tune_sample.jsonl
    • divisão de validação = 20%
    • resultados Caminho do Object Storage = quick_actions/tuning_results
    • shape = BM.GPU.A10.4 se houver disponibilidade. Caso contrário, use as formas 10.2 ou 10.1
    • selecione seu Grupo de Logs e Log
  6. Ative Mostrar configurações avançadas com estas definições:

    • batch_size = 64
    • sequence_len = 256
    • learning_rate = 0.000025
    • epochs = 12
  7. O ajuste fino leva cerca de 60 minutos em uma A10.2. Portanto, clique em Abrir logs no terminal para monitorar os logs do job de ajuste fino.

  8. Exiba a curva de aprendizado do modelo ajustado na seção Métricas. Um modelo bem ajustado terá uma curva de Perda de Validação que desce e depois platôs com época crescente. img.png

Descrição da ilustração learning_curve.png

Tarefa 8: Implantar o LLM Ajustado

  1. Navegue até Ações Rápidas de IA > Modelos ajustados > <seu modelo recém-ajustado> > Implantar com estas definições:

    • Forma de computação = VM.GPU.A10.1
    • Selecione seu Grupo de Logs e Log
  2. Clique em Abrir logs no terminal para monitorar o log de implantação

Tarefa 9: Testar a Implantação do LLM Ajustado

  1. Após a conclusão da implantação do modelo, navegue até Implantações > <seu modelo recém-ajustado> > Testar seu modelo e reproduzi-lo usando perguntas das perguntas de amostra de teste exibidas no notebook prep_data.ipynb, como:

    What benefits does Unified Memory bring to complex data structures and classes?
    
    
  2. Copie/cole o ponto final do modelo na variável de shell da sua sessão de terminal:

    endpoint=https://modeldeployment.<region>.oci.customer-oci.com/<model_ocid>/predict
    
  3. Envie um prompt para o ponto final do modelo implantado:

    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. Use este loop bash para chamar o ponto final do modelo 100 vezes:

    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. Clique no Log do modelo ajustado/implantado para exibir o tráfego recente no ponto final desse modelo

  6. Abra o notebook compare_models.ipynb Jupyter e atualize o parágrafo [8] para fazer referência aos pontos finais dos seus dois modelos, ajustados e não ajustados.

  7. Execute esse notebook, que irá:

    • Leia a amostra de teste dos registros de perguntas frequentes.
    • Use o python para alimentar cinco perguntas de teste nos pontos finais do modelo ajustado e não ajustado e comparar suas respostas.
    • Observação parágrafo [10] que ilustra como chamar um ponto final de modelo implantado usando python, o que é bastante simples: img.png

      Descrição da ilustração call_endpoint.png

  8. Revise as principais descobertas deste teste:

    • As respostas do LLM ajustadas têm um tom, estilo e comprimento bastante semelhantes às respostas de perguntas frequentes compostas pela NVIDIA.
    • As respostas do LLM não ajustadas são muito mais verbosas e incluem muitas declarações estranhas que provavelmente estão incorretas.
    • As respostas do LLM ajustado versus não ajustado estão incorretas com mais frequência do que não, e aproximadamente da mesma forma.
    • O ajuste fino em um conjunto de dados muito maior provavelmente aumentaria a precisão de suas respostas.

Tarefa 10: Excluir os Recursos

  1. Navegue até Ações Rápidas de IA > Implantações e exclua suas implantações de modelo.

  2. Navegue até Ações Rápidas de IA > Modelos > Modelos ajustados e exclua.

  3. Use a página da console do OCI para navegar até a sessão de notebook do serviço Data Science e Encerrar.

  4. Clique em Jobs e exclua seus jobs de ajuste fino.

  5. Exclua o Projeto do serviço Data Science.

  6. Use a página da console do OCI para navegar até o bucket do Object Storage e excluí-lo.

  7. Use a console do OCI para excluir seu Log e Grupo de Logs.

Confirmações

Mais Recursos de Aprendizado

Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal do Oracle Learning YouTube. Além disso, acesse education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.

Para obter a documentação do produto, visite o Oracle Help Center.