Avaliar modelos de linguagem grande usando o Azure Databricks e o OpenAI do Azure

A avaliação de LLMs (modelos de linguagem grande) envolve uma série de etapas para garantir que o desempenho do modelo atenda aos padrões exigidos. MLflow LLM Evaluate, um recurso do Azure Databricks, fornece uma abordagem estruturada para esse processo, incluindo a configuração do ambiente, a definição de métricas de avaliação e a análise de resultados. Essa avaliação é crucial, pois os LLMs geralmente não têm uma única verdade para comparação, tornando os métodos tradicionais de avaliação inadequados.

Este laboratório levará aproximadamente 20 minutos para ser concluído.

Antes de começar

É necessário ter uma assinatura do Azure com acesso de nível administrativo.

Provisionar um recurso de OpenAI do Azure

Se ainda não tiver um, provisione um recurso OpenAI do Azure na sua assinatura do Azure.

  1. Entre no portal do Azure em https://portal.azure.com.
  2. Crie um recurso do OpenAI do Azure com as seguintes configurações:
    • Assinatura: Selecione uma assinatura do Azure que tenha sido aprovada para acesso ao serviço Azure OpenAI
    • Grupo de recursos: escolher ou criar um grupo de recursos
    • Região: faça uma escolha aleatória de uma das regiões a seguir*
      • Leste dos EUA 2
      • Centro-Norte dos EUA
      • Suécia Central
      • Oeste da Suíça
    • Nome: um nome exclusivo de sua preferência
    • Tipo de preço: Standard S0

* Os recursos do OpenAI do Azure são restritos por cotas regionais. As regiões listadas incluem a cota padrão para os tipos de modelos usados neste exercício. A escolha aleatória de uma região reduz o risco de uma só região atingir o limite de cota em cenários nos quais você compartilha uma assinatura com outros usuários. No caso de um limite de cota ser atingido mais adiante no exercício, há a possibilidade de você precisar criar outro recurso em uma região diferente.

  1. Aguarde o fim da implantação. Em seguida, vá para o recurso OpenAI do Azure implantado no portal do Azure.

  2. No painel esquerdo, em Gerenciamento de recursos, selecione Chaves e Ponto de Extremidade.

  3. Copie o ponto de extremidade e uma das chaves disponíveis para usar posteriormente neste exercício.

Implantar o modelo necessário

O Azure fornece um portal baseado na Web chamado Estúdio de IA do Azure, que você pode usar para implantar, gerenciar e explorar modelos. Você iniciará sua exploração do OpenAI do Azure usando o Estúdio de IA do Azure para implantar um modelo.

Observação: À medida que você usa o Estúdio de IA do Azure, podem ser exibidas caixas de mensagens sugerindo tarefas para você executar. Você pode fechá-los e seguir as etapas desse exercício.

  1. No portal do Azure, na página Visão geral do recurso OpenAI do Azure, role para baixo até a seção Introdução e clique no botão para abrir o Estúdio de IA do Azure.

  2. No Estúdio de IA do Azure, no painel à esquerda, selecione a página Implantações e visualize as implantações de modelo existentes. Se você ainda não tiver uma implantação, crie uma nova implantação do modelo gpt-35-turbo com as seguintes configurações:

    • Nome da implantação: gpt-35-turbo
    • Modelo: gpt-35-turbo
    • Versão do modelo: padrão
    • Tipo de implantação: Padrão
    • Limite de taxa de tokens por minuto: 5K*
    • Filtro de conteúdo: Padrão
    • Habilitar cota dinâmica: Desabilitado

* Um limite de taxa de 5.000 tokens por minuto é mais do que adequado para concluir este exercício, deixando capacidade para outras pessoas que usam a mesma assinatura.

Provisionar um workspace do Azure Databricks

Dica: Se você já tem um workspace do Azure Databricks, pode ignorar esse procedimento e usar o workspace existente.

  1. Entre no portal do Azure em https://portal.azure.com.
  2. Crie um recurso do Azure Databricks com as seguintes configurações:
    • Assinatura: selecione a mesma assinatura do Azure usada para criar o recurso do OpenAI do Azure
    • Grupo de recursos: o grupo de recursos em que você criou o recurso do OpenAI do Azure
    • Região: a mesma região onde você criou seu recurso do OpenAI do Azure
    • Nome: um nome exclusivo de sua preferência
    • Tipo de preço: premium ou avaliação
  3. Selecione Revisar + criar e aguarde a conclusão da implantação. Em seguida, vá para o recurso e inicie o workspace.

Criar um cluster

O Azure Databricks é uma plataforma de processamento distribuído que usa clusters do Apache Spark para processar dados em paralelo em vários nós. Cada cluster consiste em um nó de driver para coordenar o trabalho e nós de trabalho para executar tarefas de processamento. Neste exercício, você criará um cluster de nó único para minimizar os recursos de computação usados no ambiente de laboratório (no qual os recursos podem ser restritos). Em um ambiente de produção, você normalmente criaria um cluster com vários nós de trabalho.

Dica: Se você já tiver um cluster com uma versão de runtime 13.3 LTS ML ou superior em seu workspace do Azure Databricks, poderá usá-lo para concluir este exercício e ignorar este procedimento.

  1. No portal do Azure, navegue até o grupo de recursos em que o workspace do Azure Databricks foi criado.
  2. Clique no recurso de serviço do Azure Databricks.
  3. Na página Visão geral do seu workspace, use o botão Iniciar workspace para abrir seu workspace do Azure Databricks em uma nova guia do navegador, fazendo o logon se solicitado.

Dica: ao usar o portal do workspace do Databricks, várias dicas e notificações podem ser exibidas. Dispense-as e siga as instruções fornecidas para concluir as tarefas neste exercício.

  1. Na barra lateral à esquerda, selecione a tarefa (+) Novo e, em seguida, selecione Cluster.
  2. Na página Novo Cluster, crie um novo cluster com as seguintes configurações:
    • Nome do cluster: cluster Nome do Usuário (o nome do cluster padrão)
    • Política: Sem restrições
    • Modo de cluster: Nó Único
    • Modo de acesso: Usuário único (com sua conta de usuário selecionada)
    • Versão do runtime do Databricks: Selecione a edição do ML da última versão não beta do runtime (Não uma versão de runtime Standard) que:
      • Não usa uma GPU
      • Inclui o Scala > 2.11
      • Inclui o Spark > 3.4
    • Usa a Aceleração do Photon: Não selecionado
    • Tipo de nó: Standard_D4ds_v5
    • Encerra após 20 minutos de inatividade
  3. Aguarde a criação do cluster. Isso pode levar alguns minutos.

Observação: se o cluster não for iniciado, sua assinatura pode ter cota insuficiente na região onde seu workspace do Azure Databricks está provisionado. Consulte Limite de núcleo da CPU impede a criação do cluster para obter detalhes. Se isso acontecer, você pode tentar excluir seu workspace e criar um novo workspace em uma região diferente.

Instalar as bibliotecas necessárias

  1. Na página do cluster, selecione a guia Bibliotecas.

  2. Selecione Instalar novo.

  3. Escolha PyPI como a fonte da biblioteca e instale o openai==1.42.0.

Criar um novo notebook

  1. Na barra lateral, use o link (+) Novo para criar um Notebook.

  2. Nomeie seu notebook e, na lista suspensa Conectar, selecione o cluster caso ainda não esteja selecionado. Se o cluster não executar, é porque ele pode levar cerca de um minuto para iniciar.

  3. Na primeira célula do notebook, execute o seguinte código com as informações de acesso copiadas no início deste exercício para atribuir variáveis de ambiente persistentes para autenticação ao usar recursos do OpenAI do Azure:

     import os
    
     os.environ["AZURE_OPENAI_API_KEY"] = "your_openai_api_key"
     os.environ["AZURE_OPENAI_ENDPOINT"] = "your_openai_endpoint"
     os.environ["AZURE_OPENAI_API_VERSION"] = "2023-03-15-preview"
    

Avaliar LLM com uma função personalizada

No MLflow 2.8.0 e superior, mlflow.evaluate() dá suporte à avaliação de uma função Python sem exigir que o modelo seja registrado no MLflow. O processo envolve a especificação do modelo a ser avaliado, as métricas a serem calculadas e os dados de avaliação, que geralmente são um DataFrame do Pandas.

  1. Em uma nova célula, execute o código a seguir para definir um dataframe de avaliação de amostra:

     import pandas as pd
    
     eval_data = pd.DataFrame(
         {
             "inputs": [
                 "What is MLflow?",
                 "What is Spark?",
             ],
             "ground_truth": [
                 "MLflow is an open-source platform for managing the end-to-end machine learning (ML) lifecycle. It was developed by Databricks, a company that specializes in big data and machine learning solutions. MLflow is designed to address the challenges that data scientists and machine learning engineers face when developing, training, and deploying machine learning models.",
                 "Apache Spark is an open-source, distributed computing system designed for big data processing and analytics. It was developed in response to limitations of the Hadoop MapReduce computing model, offering improvements in speed and ease of use. Spark provides libraries for various tasks such as data ingestion, processing, and analysis through its components like Spark SQL for structured data, Spark Streaming for real-time data processing, and MLlib for machine learning tasks",
             ],
         }
     )
    
  2. Em uma nova célula, execute o seguinte código para inicializar um cliente para o recurso OpenAI do Azure e definir sua função personalizada:

     import os
     import pandas as pd
     from openai import AzureOpenAI
    
     client = AzureOpenAI(
         azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),
         api_key = os.getenv("AZURE_OPENAI_API_KEY"),
         api_version = os.getenv("AZURE_OPENAI_API_VERSION")
     )
    
     def openai_qa(inputs):
         answers = []
         system_prompt = "Please answer the following question in formal language."
         for index, row in inputs.iterrows():
             completion = client.chat.completions.create(
                 model="gpt-35-turbo",
                 messages=[
                     {"role": "system", "content": system_prompt},
                     {"role": "user", "content": "{row}"},
                 ],
             )
             answers.append(completion.choices[0].message.content)
    
         return answers
    
    
  3. Em uma nova célula, execute o seguinte código para criar um experimento e avaliar a função personalizada com os dados de avaliação:

     import mlflow
    
     with mlflow.start_run() as run:
         results = mlflow.evaluate(
             openai_qa,
             eval_data,
             model_type="question-answering",
         )
    

    Depois que a execução for bem-sucedida, ela gerará um link para a página do experimento, onde você poderá verificar as métricas do modelo. Para model_type="question-answering", as métricas padrão são toxicidade, ari_grade_level e flesch_kincaid_grade_level.

Limpar

Quando terminar o recurso do OpenAI do Azure, lembre-se de excluir a implantação ou todo o recurso no portal do Azure em https://portal.azure.com.

No portal do Azure Databricks, na página Computação, selecione seu cluster e selecione ■ Terminar para encerrar o processo.

Se você tiver terminado de explorar o Azure Databricks, poderá excluir os recursos que criou para evitar custos desnecessários do Azure e liberar capacidade em sua assinatura.