Prática prática de usar um conjunto completo de ferramentas de código aberto para construir aplicativos LLM: chamando os recursos do modelo de código aberto Baichuan no Dify

fundo

No contexto atual de popularidade de modelos de linguagem de código aberto de grande porte, um grande número de desenvolvedores espera implantar LLM de código aberto localmente para pesquisa em LLM ou para construir seus próprios aplicativos de LLM baseados em LLM de código aberto. O autor também está tentando construir seu próprio aplicativo LLM por meio de uma série de excelentes projetos relacionados na comunidade de código aberto e por meio de serviços de implantação localizados. Então, quais preparativos são necessários para implantar localmente um LLM de código aberto para construir um aplicativo de chat?

Preparando o ambiente local:

Como precisamos implantar localmente um grande modelo de código aberto, é necessário preparar um ambiente local bastante rígido. O hardware requer uma placa gráfica NVDIA com alto desempenho e grande memória de vídeo, memória de alta velocidade e grande capacidade e uma unidade de estado sólido de grande capacidade. O software requer a instalação de drivers de placa gráfica, CUDA e ambientes Python. Desta vez optei por rodar o modelo Baichuan-chat-13B como exemplo.Minha configuração básica é CPU i9-13900K, placas duplas GTX3090 de 24GB, memória de 64GB e unidade de estado sólido de 2TB.

Um grande modelo de linguagem (LLM):

Esta é a base sobre a qual construímos aplicações LLM. Diferentes LLMs têm diferentes estruturas de modelo e conhecimento aprendido com base em diferentes dados de pré-treinamento e tarefas alvo. Os aplicativos de IA construídos com base em modelos diferentes também terão desempenho diferente. Você pode encontrar os LLMs de código aberto nos quais está interessado por meio da popular comunidade de IA Hugging Face para testar e comparar recursos.

Um serviço de inferência que implanta LLM localmente: O serviço de inferência pode carregar o modelo LLM pré-treinado no servidor local e fornecer uma interface de previsão de modelo, para que o modelo LLM possa ser usado localmente para executar várias tarefas de PNL sem depender de serviços de nuvem. Você pode usar alguns excelentes projetos de código aberto do GitHub, que fornecem implantação de serviços de inferência com um clique para LLM de código aberto popular. Os que são relativamente conhecidos e têm muitas estrelas incluem LocalAI, openLLM, etc.

Um "sistema operacional LLM" simples e fácil de usar Dify.AI: Se você deseja construir um aplicativo de bate-papo baseado em recursos LLM, pode ser necessário estudar o conjunto completo de pilhas de tecnologia LLM, como: chamadas de API de diferentes modelos, seleção de banco de dados de vetores, incorporação de pesquisa de tecnologia e assim por diante. Se você usar o projeto de código aberto Dify.AI, poderá salvar essas tarefas de pesquisa e aprendizagem e ajudá-lo a criar rapidamente aplicativos de IA baseados em diferentes recursos de LLM por meio de uma interface visual. A versão mais recente do Dify adicionou suporte para LLMs de código aberto. Todos os modelos hospedados no HuggingFace e Replicate podem ser chamados e alternados rapidamente. Ele também oferece suporte à implantação local e pode criar aplicativos de IA baseados em serviços de inferência openLLM e Xorbits.

O autor tentará usar a plataforma LLMOps de código aberto Dify.AI, o serviço de inferência de código aberto Xinference e o modelo de código aberto baichuan-chat-13B  como exemplos para ensinar passo a passo como construir um aplicativo de bate-papo LLM em um ambiente Windows . Sem mais delongas, vamos direto ao trabalho.

Preparação ambiental

Conda básico e Python geralmente devem estar disponíveis. No entanto, este artigo apresentará a configuração do ambiente do zero!

Configurar ambiente python

Geralmente, é recomendado usar conda para gerenciamento de versão python. Primeiro instale o conda de acordo com a documentação do site oficial do conda [1] . Em seguida, use conda para inicializar o ambiente Python 3.11:

conda create --name python-3-11 python=3.11
conda activate python-3-11

Instalar CUDA

Recomenda-se instalar diretamente do site oficial [2] . Windows 11 Selecione a versão mostrada abaixo.

Após instalar de acordo com o boot, abra "Painel de controle da Nvidia -> Informações do sistema" e veja se está instalado.

Preparação WSL2

Recomenda-se usar o ambiente WSL2 para implantação do docker do Dify. Então agora instale o WSL2 primeiro. Consulte as diretrizes oficiais da Microsoft [3] .

A primeira etapa é executar o CMD como administrador:

A segunda etapa é instalar usando o comando no CMD:

wsl --install

Como resultado, podemos ver as várias versões de sistema suportadas

适用于 Linux 的 Windows 子系统已安装。

以下是可安装的有效分发的列表。
请使用“wsl --install -d <分发>”安装。

NAME                                   FRIENDLY NAME
Ubuntu                                 Ubuntu
Debian                                 Debian GNU/Linux
kali-linux                             Kali Linux Rolling
Ubuntu-18.04                           Ubuntu 18.04 LTS
Ubuntu-20.04                           Ubuntu 20.04 LTS
Ubuntu-22.04                           Ubuntu 22.04 LTS
OracleLinux_7_9                        Oracle Linux 7.9
OracleLinux_8_7                        Oracle Linux 8.7
OracleLinux_9_1                        Oracle Linux 9.1
openSUSE-Leap-15.5                     openSUSE Leap 15.5
SUSE-Linux-Enterprise-Server-15-SP4    SUSE Linux Enterprise Server 15 SP4
SUSE-Linux-Enterprise-15-SP5           SUSE Linux Enterprise 15 SP5
openSUSE-Tumbleweed                    openSUSE Tumbleweed

Instalei a versão padrão do Ubuntu usando select:

wsl --install -d Ubuntu

Depois disso, você pode usar o comando “wsl” no CMD para entrar no Ubuntu.

Etapa 3. Instale o Docker Desktop

Vá para a documentação oficial do Docker [4] para baixar o "Docker Desktop". Ao instalar, certifique-se de marcar a opção “Usar WSL 2 em vez de Hyper-V”. Após a conclusão da instalação, reinicie o computador. Verifique se está instalado normalmente através do CMD.

wsl -l --verbose

 NAME                   STATE           VERSION
* Ubuntu                 Running         2
  docker-desktop         Running         2
  docker-desktop-data    Running         2

Você pode ver que o Ubuntu e o Docker estão rodando em WSL e foram confirmados como versões WSL2.

Etapa 4: configurar o proxy para WSL

Como o endereço IP do WSL mudará após cada reinicialização, podemos escrever um script para resolvê-lo. Mude a linha 4 para o seu próprio número de porta.

#!/bin/sh
hostip=$(cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }')
wslip=$(hostname -I | awk '{print $1}')
port=7890

PROXY_HTTP="http://${hostip}:${port}"

set_proxy(){
  export http_proxy="${PROXY_HTTP}"
  export HTTP_PROXY="${PROXY_HTTP}"

  export https_proxy="${PROXY_HTTP}"
  export HTTPS_proxy="${PROXY_HTTP}"

  export ALL_PROXY="${PROXY_SOCKS5}"
  export all_proxy=${PROXY_SOCKS5}

  git config --global http.https://github.com.proxy ${PROXY_HTTP}
  git config --global https.https://github.com.proxy ${PROXY_HTTP}

  echo "Proxy has been opened."
}

unset_proxy(){
  unset http_proxy
  unset HTTP_PROXY
  unset https_proxy
  unset HTTPS_PROXY
  unset ALL_PROXY
  unset all_proxy
  git config --global --unset http.https://github.com.proxy
  git config --global --unset https.https://github.com.proxy

  echo "Proxy has been closed."
}

test_setting(){
  echo "Host IP:" ${hostip}
  echo "WSL IP:" ${wslip}
  echo "Try to connect to Google..."
  resp=$(curl -I -s --connect-timeout 5 -m 5 -w "%{http_code}" -o /dev/null www.google.com)
  if [ ${resp} = 200 ]; then
    echo "Proxy setup succeeded!"
  else
    echo "Proxy setup failed!"
  fi
}

if [ "$1" = "set" ]
then
  set_proxy

elif [ "$1" = "unset" ]
then
  unset_proxy

elif [ "$1" = "test" ]
then
  test_setting
else
  echo "Unsupported arguments."
fi

O quinto passo é entrar no Ubuntu, instalar o conda e configurar o python

Assim como na preparação do ambiente anterior, siga a documentação oficial para instalar o conda e configurar o python, mas instale a versão Linux.

Etapa 6, instale CUDA para WSL

Acesse o site oficial, selecione a versão WSL-Ubuntu e siga as instruções para instalar usando a linha de comando.

Etapa 7, instale o PyTorch

Entre no site oficial do PyTorch [5] e instale o PyTorch de acordo com o ambiente.

Isso completa a preparação do ambiente.

Implantar o serviço de inferência Xinference

De acordo com a documentação de implantação do Dify [6] , o Xinference oferece suporte a vários modelos. Desta vez, vamos escolher Xinference e tentar baichuan-chat-3B.

A inferência Xorbits é uma estrutura de inferência distribuída poderosa e versátil projetada para atender grandes modelos de linguagem, modelos de reconhecimento de fala e modelos multimodais, mesmo em um laptop. Ele suporta uma variedade de modelos compatíveis com GGML, como ChatGLM, Baichuan, Whisper, Vicuna, Orca, etc. O Dify oferece suporte à implantação local para acessar o raciocínio do grande modelo de linguagem e os recursos de incorporação implantados pelo Xinference.

Instalar Xinfernece

Execute o seguinte comando no WSL:

$ pip install "xinference"

O comando acima instalará as dependências básicas do Xinference para inferência. Xinference também suporta "inferência ggml" e "inferência PyTorch".Você precisa instalar as seguintes dependências:

$ pip install "xinference[ggml]"
$ pip install "xinference[pytorch]"
$ pip install "xinference[all]"

Inicie o Xinference, baixe e implante o modelo baichuan-chat-3B

Execute o seguinte comando no WSL:

$ xinference -H 0.0.0.0

O Xinference iniciará um trabalhador localmente por padrão e o endpoint é:

http://127.0.0.1:9997  ", a porta padrão é "9997". Por padrão, ele só pode ser acessado pelo computador local. Se "-H 0.0.0.0" estiver configurado, clientes não locais poderão acessá-lo à vontade. Se precisar modificar ainda mais "host" ou "porta", você pode visualizar as informações de ajuda do xinference: "xinference --help".

2023-08-25 18:08:31,204 xinference   27505 INFO     Xinference successfully started. Endpoint: http://0.0.0.0:9997
2023-08-25 18:08:31,204 xinference.core.supervisor 27505 INFO     Worker 0.0.0.0:53860 has been added successfully
2023-08-25 18:08:31,205 xinference.deploy.worker 27505 INFO     Xinference worker successfully started.

Abra no navegador: http://localhost:9997, selecione baichuan-chat, pytorch, 13B, 4bit, clique em criar para implantar.

Ou implante usando CLI:

xinference launch --model-name baichuan-chat --model-format pytorch --size-in-billions 13 --quantization 4

Como diferentes modelos têm compatibilidade diferente em diferentes plataformas de hardware, verifique o modelo integrado do Xinference [7] para determinar se o modelo criado suporta a plataforma de hardware atual.

Use Xinference para gerenciar modelos

Para visualizar todos os modelos implementados, na linha de comando, execute o seguinte comando:

$ xinference list

Serão exibidas informações semelhantes às seguintes:

UID                                   Type    Name           Format      Size (in billions)  Quantization
------------------------------------  ------  -------------  --------  --------------------  --------------
0db1e250-4330-11ee-b9ef-00155da30d2d  LLM     baichuan-chat  pytorch                     13  4-bit

"0db1e250-4330-11ee-b9ef-00155da30d2d" é o uid do modelo recém-implantado.

Implantar Dify.AI

Para o processo principal, consulte o documento de implantação do site oficial [8] .

Clonar Dificar

Clonar o código-fonte do Dify para local

git clone https://github.com/langgenius/dify.git

Iniciar modificação

Entre no diretório docker do código-fonte diferenciado e execute o comando de inicialização com um clique:

cd dify/docker
docker compose up -d

Resultados da implantação:

[+] Running 7/7
 ✔ Container docker-weaviate-1  Running                                                0.0s 
 ✔ Container docker-web-1       Running                                                0.0s 
 ✔ Container docker-redis-1     Running                                                0.0s 
 ✔ Container docker-db-1        Running                                                0.0s 
 ✔ Container docker-worker-1    Running                                                0.0s 
 ✔ Container docker-api-1       Running                                                0.0s 
 ✔ Container docker-nginx-1     Started                                                0.9s

Por fim, verifique se todos os contêineres estão funcionando corretamente:

docker compose ps

Estado operacional:

NAME                IMAGE                              COMMAND                  SERVICE             CREATED             STATUS              PORTS
docker-api-1        langgenius/dify-api:0.3.16         "/bin/bash /entrypoi…"   api                 24 hours ago        Up 3 hours          5001/tcp
docker-db-1         postgres:15-alpine                 "docker-entrypoint.s…"   db                  33 hours ago        Up 3 hours          0.0.0.0:5432->5432/tcp
docker-nginx-1      nginx:latest                       "/docker-entrypoint.…"   nginx               24 hours ago        Up 4 minutes        0.0.0.0:80->80/tcp
docker-redis-1      redis:6-alpine                     "docker-entrypoint.s…"   redis               33 hours ago        Up 3 hours          6379/tcp
docker-weaviate-1   semitechnologies/weaviate:1.18.4   "/bin/weaviate --hos…"   weaviate            33 hours ago        Up 3 hours          
docker-web-1        langgenius/dify-web:0.3.16         "/bin/sh ./entrypoin…"   web                 33 hours ago        Up 3 hours          3000/tcp
docker-worker-1     langgenius/dify-api:0.3.16         "/bin/bash /entrypoi…"   worker              33 hours ago        Up 3 hours          5001/tcp包括 3 个业务服务「 api / worker / web 」,以及 4 个基础组件「 weaviate / db / redis / nginx 」。

Inclui 3 serviços de negócios "api/worker/web" e 4 componentes básicos "weaviate/db/redis/nginx".

Depois que o Docker for iniciado com sucesso, visite: http://127.0.0.1/ no navegador. Após definir uma senha e fazer login, você entrará na página da lista de aplicativos.

Neste ponto, o Dify Community Edition foi implantado com sucesso usando Docker.

Conecte-se ao Xinference no Dify

Configurar provedor de modelo

Preencha as informações do modelo em "Configurações > Fornecedor de Modelo > Xinference":

  • Nome do modelo é o nome que você dá à implantação do modelo.
  • URL do servidor é o endereço do ponto final do xinference.
  • O UID do modelo é o UID do modelo implantado obtido por meio da lista xinference

Deve-se observar que o Sever Url não pode usar localhost. Porque se você preencher localhost, você estará acessando o localhost no docker, o que fará com que o acesso falhe. A solução é alterar o URL do servidor para o IP da LAN. Em um ambiente WSL, você precisa usar o endereço IP WSL.

Use o comando no WSL para obter:

hostname -I
172.31.157.121

Use o bate-papo baichuan

Depois de criar um aplicativo, você pode usar o modelo baichuan-chat-3B configurado na etapa anterior do aplicativo. Na interface de organização de palavras de prompt do Dify, selecione o modelo baichuan-chat, projete a palavra de prompt do seu aplicativo (prompt) e, em seguida, publique um aplicativo de IA acessível.

O texto acima é todo o processo de implantação local do Dify e conexão com o baichuan-chat implantado pelo Xinference. Neste ponto, nosso aplicativo de bate-papo baseado em baichuan-chat-13B está basicamente concluído.

pós-escrito

É claro que, para um aplicativo LLM de nível de produção, não basta apenas concluir o acesso, a inferência e a interação de chat do modelo grande. Também precisamos ajustar especificamente os prompts do LLM, adicionar dados privados como contexto ou ajustar o próprio LLM, o que requer iteração e otimização de longo prazo para tornar o desempenho do aplicativo LLM cada vez melhor. Como plataforma de ferramenta de middleware, Dify.AI fornece um sistema operacional visual para uma pilha completa de tecnologia de aplicativos LLM. Após a conclusão da implantação do serviço básico acima, as iterações e melhorias subsequentes do aplicativo podem ser concluídas com base no Dify, tornando a construção e o gerenciamento de aplicativos LLM mais simples e fáceis de usar. A limpeza pode ser concluída automaticamente carregando diretamente os dados de negócios. Após o processamento , serviços de anotação e melhoria de dados também serão fornecidos no futuro, e até mesmo sua equipe de negócios poderá participar da colaboração.

Actualmente, o desenvolvimento e aplicação do LLM ainda se encontram numa fase muito inicial.Acredito que num futuro próximo, quer se trate do lançamento de capacidades LLM ou da melhoria contínua das capacidades de várias ferramentas baseadas em LLM, o limiar para os desenvolvedores para explorar os recursos do LLM continuarão a ser reduzidos. Deixe surgir mais aplicativos de IA com cenários ricos.


Se você gosta do Dify, seja bem-vindo:

  • Contribua com código no GitHub e construa um Dify melhor conosco;
  • Compartilhe o Dify e sua experiência com seus amigos por meio de atividades online e offline e nas redes sociais;
  • Dê-nos uma mensagem no GitHub ⭐️

Você também pode entrar em contato com o assistente Dify e participar de nosso bate-papo em grupo de amigos para compartilhar experiências:

Acho que você gosta

Origin blog.csdn.net/DifyAI/article/details/132622617
Recomendado
Clasificación