paint-brush
Como treinar seu próprio modelo Private ChatGPT para o custo de um café Starbuckspor@zhoujieguang
3,158 leituras
3,158 leituras

Como treinar seu próprio modelo Private ChatGPT para o custo de um café Starbucks

por Zhou Jieguang12m2023/06/18
Read on Terminal Reader

Muito longo; Para ler

Com o custo de uma xícara de Starbucks e duas horas do seu tempo, você pode ter seu próprio modelo em larga escala de código aberto treinado.
featured image - Como treinar seu próprio modelo Private ChatGPT para o custo de um café Starbucks
Zhou Jieguang HackerNoon profile picture
0-item
1-item
2-item


Com o custo de uma xícara de Starbucks e duas horas do seu tempo, você pode ter seu próprio modelo em larga escala de código aberto treinado. O modelo pode ser ajustado de acordo com diferentes direções de dados de treinamento para aprimorar várias habilidades, como medicina, programação , negociação de ações e conselhos amorosos, tornando seu modelo em grande escala mais “compreensivo” sobre você. Vamos tentar treinar um modelo em larga escala de código aberto habilitado pelo DolphinScheduler de código aberto!

Introdução

A democratização do ChatGPT

O nascimento do ChatGPT sem dúvida nos encheu de expectativa para o futuro da IA. Sua expressão sofisticada e poderosa capacidade de compreensão de linguagem surpreenderam o mundo. No entanto, como o ChatGPT é fornecido como um Software como Serviço (SaaS), questões de vazamentos de privacidade pessoal e segurança de dados corporativos são preocupações de todos os usuários e empresas. Mais e mais modelos de larga escala de código aberto estão surgindo, possibilitando que indivíduos e empresas tenham seus próprios modelos. No entanto, começar, otimizar e usar modelos de larga escala de código aberto tem grandes barreiras à entrada, tornando difícil para todos usá-los facilmente. Para resolver isso, usamos o Apache DolphinScheduler, que fornece suporte com um clique para treinamento, ajuste e implantação de modelos de grande escala de código aberto. Isso permite que todos treinem seus próprios modelos em larga escala usando seus dados a um custo muito baixo e com conhecimento técnico.

para quem é isso? — Qualquer pessoa na frente de uma tela

Nosso objetivo não é apenas que engenheiros profissionais de IA, mas também qualquer pessoa interessada em GPT desfrute da alegria de ter um modelo que os “entenda” melhor. Acreditamos que todos têm o direito e a capacidade de moldar seu próprio assistente de IA. O fluxo de trabalho intuitivo do Apache DolphinScheduler torna isso possível. Como bônus, o Apache DolphinScheduler é uma ferramenta de agendamento de big data e IA com mais de 10.000 estrelas no GitHub. É um projeto de alto nível sob a Apache Software Foundation, o que significa que você pode usá-lo gratuitamente e modificar o código sem se preocupar com problemas comerciais.


Seja você um especialista do setor que deseja treinar um modelo com seus próprios dados ou um entusiasta de IA que deseja entender e explorar o treinamento de modelos de aprendizado profundo, nosso fluxo de trabalho fornecerá serviços convenientes para você. Ele resolve etapas complexas de pré-processamento, treinamento de modelo e otimização e requer apenas 1 a 2 horas de operações simples, além de 20 horas de tempo de execução para criar um modelo ChatGPT de grande escala mais “compreensivo”.

Então vamos começar esta jornada mágica! Vamos trazer o futuro da IA para todos.

Apenas três passos para criar um ChatGPT que “entenda” você melhor

  1. Alugue uma placa GPU a baixo custo equivalente a um nível 3090
  2. Inicie o DolphinScheduler
  3. Clique no fluxo de trabalho de treinamento e no fluxo de trabalho de implantação na página DolphinScheduler e experimente diretamente seu ChatGPT

Preparando um host com uma placa gráfica 3090

Primeiro, você precisa de uma placa gráfica 3090. Se você tiver um computador desktop, poderá usá-lo diretamente. Caso contrário, existem muitos hosts para alugar com GPU online. Aqui usamos o AutoDL como exemplo a ser aplicado. Abra https://www.autodl.com/home , registre-se e faça o login. Depois disso, você pode escolher o servidor correspondente no mercado de poder de computação de acordo com as etapas 1, 2 e 3 mostradas na tela.

Fonte da imagem: foto do próprio autor


Aqui, é recomendável escolher a placa gráfica RTX 3090, que oferece uma alta relação custo-desempenho. Após o teste, descobriu-se que uma a duas pessoas podem usar o RTX 3090 para tarefas online. Se você deseja velocidades de treinamento e resposta mais rápidas, pode optar por uma placa gráfica mais poderosa. O treinamento uma vez leva aproximadamente 20 horas, enquanto o teste requer cerca de 2 a 3 horas. Com um orçamento de 40 yuans, você pode fazer isso facilmente.

Espelho

Clique no espelho da comunidade e digite WhaleOps/dolphinscheduler-llm/dolphinscheduler-llm-0521 na caixa vermelha abaixo. Você pode selecionar a imagem como mostrado abaixo. Atualmente, apenas a versão V1 está disponível. No futuro, conforme novas versões forem lançadas, você poderá escolher a mais recente.

Fonte da imagem: foto do próprio autor


Se você precisar treinar o modelo várias vezes, é recomendável expandir a capacidade do disco rígido para cerca de 100 GB.


Depois de criá-lo, aguarde a conclusão da barra de progresso mostrada na imagem a seguir.

Inicie o DolphinScheduler

Para implantar e depurar seu próprio modelo de grande escala de código aberto na interface, você precisa iniciar o software DolphinScheduler e precisamos fazer o seguinte trabalho de configuração:

Para acessar o servidor

Existem dois métodos disponíveis. Você pode escolher o que mais se adequa a sua preferência:

  1. Faça login via JupyterLab (para não codificadores):

Clique no botão JupyterLab mostrado abaixo.

Fonte da imagem: foto do próprio autor


A página será redirecionada para o JupyterLab; a partir daí, você pode clicar em “Terminal” para entrar.

Fonte da imagem: foto do próprio autor


2. Login via Terminal (para codificadores):

Podemos obter o comando de conexão SSH no botão mostrado na imagem a seguir.

Fonte da imagem: foto do próprio autor


Em seguida, estabeleça a conexão através do terminal.

Fonte da imagem: foto do próprio autor


Importar os metadados do DolphinScheduler

No DolphinScheduler, todos os metadados são armazenados no banco de dados, incluindo definições de fluxo de trabalho, configurações de ambiente, informações de inquilino, etc. da tela.


Modifique o script para importar dados para o MySQL:

Usando o terminal, navegue até o seguinte diretório:

cd apache-dolphinscheduler-3.1.5-bin


Execute o comando: vim import_ds_metadata.sh para abrir o arquivo import_ds_metadata.sh . O conteúdo do arquivo é o seguinte:



Set variables

Hostname

HOST="xxx.xxx.xxx.x"


UsernameUSERNAME="root"PasswordPASSWORD="xxxx"PortPORT=3306Database to import intoDATABASE="ds315_llm_test"SQL filenameSQL_FILE="ds315_llm.sql"mysql -h $HOST -P $PORT -u $USERNAME -p$PASSWORD -e "CREATE DATABASE $DATABASE;"mysql -h $HOST -P $PORT -u $USERNAME -p$PASSWORD $DATABASE < $SQL_FILE


Substitua xxx.xxx.xxx.x e xxxx pelos valores de configuração relevantes de um banco de dados MySQL em sua rede pública (você pode solicitar um no Alibaba Cloud, Tencent Cloud ou instalar você mesmo). Então execute:

bash import_ds_metadata.sh


Após a execução, se estiver interessado, você pode verificar os metadados correspondentes no banco de dados (conecte-se ao MySQL e visualize, pule esta etapa se não estiver familiarizado com o código).

Fonte da imagem: foto do próprio autor


Inicie o DolphinScheduler

Na linha de comando do servidor, abra o seguinte arquivo e modifique a configuração para conectar o DolphinScheduler com o banco de dados previamente importado:


/root/apache-dolphinscheduler-3.1.5-bin/bin/env/dolphinscheduler_env.sh


Modifique a configuração relevante na seção do banco de dados e deixe as outras seções inalteradas. Altere os valores de 'HOST' e 'PASSWORD' para os valores de configuração do banco de dados importado, ou seja, xxx.xxx.xxx.x e xxxx:


export DATABASE=mysqlexport SPRING_PROFILES_ACTIVE=${DATABASE}export SPRING_DATASOURCE_URL="jdbc:mysql://HOST:3306/ds315_llm_test?useUnicode=true&characterEncoding=UTF-8&useSSL=false"export SPRING_DATASOURCE_USERNAME="root"export SPRING_DATASOURCE_PASSWORD="xxxxxx"......


Após configurar, execute (também neste diretório /root/apache-dolphinscheduler-3.1.5-bin):

bash ./bin/dolphinscheduler-daemon.sh start standalone-server


Uma vez executado, podemos verificar os logs usando tail -200f standalone-server/logs/dolphinscheduler-standalone.log . Neste ponto, DolphinScheduler é lançado oficialmente!


Após iniciar o serviço, podemos clicar em “Custom Services” no console do AutoDL (destacado em vermelho) para sermos redirecionados para uma URL:

Fonte da imagem: foto do próprio autor


Ao abrir a URL, se ela apresentar um erro 404, não se preocupe. Basta anexar o sufixo /dolphinscheduler/ui ao URL:

Fonte da imagem: foto do próprio autor

O módulo AutoDL abre a porta 6006. Depois de configurar a porta do DolphinScheduler para 6006, você pode acessá-la através do ponto de entrada fornecido. No entanto, devido ao redirecionamento de URL, você pode encontrar um erro 404. Nesses casos, você precisa preencher o URL manualmente.



Credenciais de login:

Nome de usuário: admin

Senha: dolphinscheduler123


Após o login, clique em “Gerenciamento de Projetos” para visualizar o projeto pré-definido denominado “vicuna”. Clique em “vicuna” para entrar no projeto.

Fonte da imagem: foto do próprio autor


Treinamento e implantação de modelo grande de código aberto

Definição do Fluxo de Trabalho

Ao entrar no projeto Vicuna, você verá três workflows: Training, Deploy e Kill_Service. Vamos explorar seus usos e como configurar modelos grandes e treinar seus dados.

Fonte da imagem: foto do próprio autor


Você pode clicar no botão executar abaixo para executar os fluxos de trabalho correspondentes.

Fonte da imagem: foto do próprio autor


Treinamento

Ao clicar no fluxo de trabalho de treinamento, você verá duas definições. Uma é para ajustar o modelo por meio do Lora (principalmente usando alpaca-lora, https://github.com/tloen/alpaca-lora ) e a outra é mesclar o modelo treinado com o modelo básico para obter o modelo final .

Fonte da imagem: foto do próprio autor


O fluxo de trabalho tem os seguintes parâmetros (aparece depois de clicar em executar):


  • base_model: O modelo base, que pode ser escolhido e baixado de acordo com a sua necessidade. Os grandes modelos de código aberto são apenas para fins de aprendizado e experiência. O padrão atual é TheBloke/vicuna-7B-1.1-HF.
  • data_path: o caminho de seus dados de treinamento personalizados e dados específicos do domínio, padrão para /root/demo-data/llama_data.json.
  • lora_path: O caminho para salvar os pesos Lora treinados, /root/autodl-tmp/vicuna-7b-lora-weight.
  • output_path: O caminho de salvamento do modelo final após mesclar o modelo base e os pesos Lora, anote-o, pois será necessário para a implantação.
  • num_epochs: Parâmetro de treinamento, o número de épocas de treinamento. Pode ser definido como 1 para teste, geralmente definido como 3~10.
  • cutoff_len: Comprimento máximo do texto, o padrão é 1024.
  • micro_batch_size: tamanho do lote.

Fonte da imagem: foto do próprio autor


Implantar

O fluxo de trabalho para implantar modelos grandes (principalmente usando FastChat, https://github.com/lm-sys/FastChat ). Ele primeiro invocará kill_service para eliminar o modelo implantado e, em seguida, iniciará sequencialmente o controlador, adicionará o modelo e, em seguida, abrirá o serviço da Web Gradio.

Fonte da imagem: foto do próprio autor


Os parâmetros iniciais são os seguintes:

Fonte da imagem: foto do próprio autor


  • model: caminho do modelo, pode ser um ID do modelo Huggingface ou o caminho do modelo treinado por nós, ou seja, o output_path do fluxo de trabalho de treinamento acima. O padrão é TheBloke/vicuna-7B-1.1-HF. Se o padrão for usado, ele implantará diretamente o modelo vicunha-7b.

Kill_service

Esse fluxo de trabalho é usado para eliminar o modelo implantado e liberar a memória da GPU. Este fluxo de trabalho não tem parâmetros e você pode executá-lo diretamente. Se você precisar interromper o serviço implantado (como quando precisar treinar novamente o modelo ou quando houver memória GPU insuficiente), poderá executar diretamente o fluxo de trabalho kill_service para eliminar o serviço implantado.


Depois de passar por alguns exemplos, sua implantação estará concluída. Agora vamos dar uma olhada na operação prática:

Exemplo de operação de modelo grande

  1. Treinando um modelo grande

Inicie o fluxo de trabalho diretamente executando o fluxo de trabalho de treinamento e selecionando os parâmetros padrão.

Fonte da imagem: foto do próprio autor


Clique com o botão direito do mouse na tarefa correspondente para visualizar os logs, conforme mostrado abaixo:

Fonte da imagem: foto do próprio autor


Você também pode visualizar o status da tarefa e os logs no painel de instância da tarefa na parte inferior esquerda da barra lateral. Durante o processo de treinamento, você pode monitorar o progresso verificando os logs, incluindo as etapas de treinamento atuais, métricas de perda, tempo restante etc. Há uma barra de progresso indicando a etapa atual, onde etapa = (tamanho dos dados * época) / lote tamanho.

Fonte da imagem: foto do próprio autor


Após a conclusão do treinamento, os logs terão a seguinte aparência:

Fonte da imagem: foto do próprio autor


Atualizando seus dados de treinamento personalizados

Nossos dados padrão estão em /root/demo-data/llama_data.json . A fonte de dados atual é Huatuo, um modelo médico ajustado usando dados médicos chineses. Sim, o nosso exemplo é a formação de um médico de família:

Fonte da imagem: foto do próprio autor


Se você tiver dados em um campo específico, poderá apontar para seus próprios dados, o formato dos dados é o seguinte:


Um JSON por linha e o significado do campo é:

  • instrução ****: Instrução para dar ao modelo.
  • entrada: Entrada.
  • saída: saída esperada do modelo.

Por exemplo:

{"instruction": "calculation", "input": "1+1 equals?", "output": "2"}


Observe que você pode mesclar os campos de instrução e entrada em um único campo de instrução. O campo de entrada também pode ser deixado vazio.


Ao treinar, modifique o parâmetro data_path para executar seus próprios dados.


Observação:


Durante a primeira execução do treinamento, o modelo base será buscado no local especificado, como TheBloke/vicuna-7B-1.1-HF. Haverá um processo de download, portanto, aguarde a conclusão do download. A escolha deste modelo é determinada pelo usuário, e você também pode optar por baixar outros modelos grandes de código aberto (siga as licenças relevantes ao usá-los).


Devido a problemas de rede, o download do modelo base pode falhar no meio da primeira execução do treinamento. Nesses casos, você pode clicar na tarefa com falha e optar por executá-la novamente para continuar o treinamento. A operação é mostrada abaixo:

Fonte da imagem: foto do próprio autor


Para interromper o treinamento, você pode clicar no botão Parar, que liberará a memória da GPU usada para o treinamento.

Fluxo de trabalho de implantação

Na página de definição do fluxo de trabalho, clique no fluxo de trabalho de implantação para executá-lo e implantar o modelo.

Fonte da imagem: foto do próprio autor


Se você não treinou seu próprio modelo, pode executar o fluxo de trabalho de implantação com os parâmetros padrão TheBloke/vicuna-7B-1.1-HF para implantar o modelo vicuna-7b , conforme mostrado na imagem abaixo:

Fonte da imagem: foto do próprio autor


Se você treinou um modelo na etapa anterior, agora pode implantar seu modelo. Após a implantação, você pode experimentar seu próprio modelo grande. Os parâmetros de inicialização são os seguintes, onde você precisa preencher o output_path do modelo da etapa anterior:

Fonte da imagem: foto do próprio autor


Em seguida, vamos inserir a instância de fluxo de trabalho implantada. Clique na instância do fluxo de trabalho e, em seguida, clique na instância do fluxo de trabalho com o prefixo “implantar”.

Fonte da imagem: foto do próprio autor

Clique com o botão direito do mouse e selecione “refresh_gradio_web_service” para visualizar os logs de tarefas e encontrar a localização de nosso link de modelo grande.


A operação é mostrada abaixo:

Fonte da imagem: foto do próprio autor



Nos logs, você encontrará um link que pode ser acessado publicamente, como:

Fonte da imagem: foto do próprio autor


Aqui estão dois links. O link 0.0.0.0:7860 não pode ser acessado porque o AutoDL só abre a porta 6006, que já é utilizada pelo dolphinscheduler. Você pode acessar diretamente o link abaixo dele, como [https://81c9f6ce11eb3c37a4.gradio.live.](https://81c9f6ce11eb3c37a4.gradio.live.)


Observe que este link pode mudar toda vez que você implantar, então você precisa encontrá-lo novamente nos logs.


Depois de entrar no link, você verá a página de conversa do seu próprio ChatGPT!

Fonte da imagem: foto do próprio autor


Fonte da imagem: foto do próprio autor


Sim! Agora você tem seu próprio ChatGPT e seus dados só servem para você!


E você gastou apenas menos do que o custo de uma xícara de café~~


Vá em frente e experimente seu próprio ChatGPT privado!

Resumo

Neste mundo orientado por dados e tecnologia, ter um modelo ChatGPT dedicado tem um valor imensurável. Com o avanço da inteligência artificial e do aprendizado profundo, estamos em uma era em que os assistentes de IA personalizados podem ser moldados. Treinar e implantar seu próprio modelo ChatGPT pode nos ajudar a entender melhor a IA e como ela está transformando nosso mundo.


Em resumo, treinar e implantar um modelo ChatGPT por conta própria pode ajudá-lo a proteger a segurança e a privacidade dos dados, atender a requisitos comerciais específicos, economizar custos de tecnologia e automatizar o processo de treinamento usando ferramentas de fluxo de trabalho como o DolphinScheduler. Ele também permite que você cumpra as leis e regulamentos locais. Portanto, treinar e implantar um modelo ChatGPT por conta própria é uma opção que vale a pena considerar.


Anotações importantes:

  • Segurança e privacidade de dados: ao usar o ChatGPT por meio de serviços API públicos, você pode se preocupar com a segurança e privacidade dos dados. Esta é uma preocupação válida, pois seus dados podem ser transmitidos pela rede. Ao treinar e implantar o modelo por conta própria, você pode garantir que seus dados sejam armazenados e processados apenas em seu próprio dispositivo ou servidor alugado, garantindo a segurança e privacidade dos dados.
  • Conhecimento específico do domínio: para organizações ou indivíduos com requisitos de negócios específicos, treinar seu próprio modelo ChatGPT garante que o modelo tenha o conhecimento mais recente e relevante relacionado ao seu negócio. Independentemente do seu domínio de negócios, um modelo especificamente treinado para suas necessidades de negócios será mais valioso do que um modelo genérico.
  • Custo de investimento: O uso do modelo ChatGPT da OpenAI pode incorrer em certos custos. Da mesma forma, se você quiser treinar e implantar o modelo por conta própria, também precisará investir recursos e incorrer em custos de tecnologia. Por exemplo, você pode experimentar a depuração de modelos grandes por apenas 40 yuans, mas se planeja executá-lo a longo prazo, é recomendável comprar uma placa de vídeo Nvidia RTX 3090 ou alugar servidores em nuvem. Portanto, você precisa pesar os prós e os contras e escolher a solução que melhor se adapta às suas circunstâncias específicas.
  • DolphinScheduler: Ao usar o fluxo de trabalho do Apache DolphinScheduler, você pode automatizar todo o processo de treinamento, reduzindo bastante a barreira técnica. Mesmo que você não tenha amplo conhecimento de algoritmos, você pode treinar com sucesso seu próprio modelo com a ajuda de tais ferramentas. Além de oferecer suporte ao treinamento de modelos grandes, o DolphinScheduler também oferece suporte ao agendamento de big data e agendamento de aprendizado de máquina, ajudando você e sua equipe não técnica a lidar facilmente com processamento de big data, preparação de dados, treinamento de modelo e implantação de modelo. Além disso, é de código aberto e de uso gratuito.
  • Restrições legais e regulamentares em modelos grandes de código aberto: DolphinScheduler é apenas uma ferramenta visual de fluxo de trabalho de IA e não fornece nenhum modelo grande de código aberto. Ao usar e baixar modelos grandes de código aberto, você deve estar ciente das diferentes restrições de uso associadas a cada modelo e cumprir as respectivas licenças de código aberto. Os exemplos dados neste artigo são apenas para fins de aprendizado e experiência pessoal. Ao usar modelos grandes, é importante garantir a conformidade com o licenciamento do modelo de código aberto. Além disso, diferentes países têm diferentes regulamentos estritos em relação ao armazenamento e processamento de dados. Ao usar modelos grandes, você deve personalizar e ajustar o modelo para cumprir os regulamentos e políticas legais específicos de sua localização. Isso pode incluir filtragem específica das saídas do modelo para cumprir com os regulamentos locais de privacidade e tratamento de informações confidenciais.


Publicado também aqui .