Práctica práctica de utilizar un conjunto completo de herramientas de código abierto para crear aplicaciones LLM: llamar a las capacidades del modelo de código abierto de Baichuan en Dify

fondo

En el contexto actual de popularidad de los grandes modelos de lenguaje de código abierto, una gran cantidad de desarrolladores esperan implementar LLM de código abierto localmente para investigar sobre LLM o crear sus propias aplicaciones de LLM basadas en LLM de código abierto. El autor también está intentando crear su propia aplicación LLM a través de una serie de excelentes proyectos relacionados en la comunidad de código abierto y mediante servicios de implementación localizados. Entonces, ¿qué preparativos se necesitan para implementar localmente un LLM de código abierto para crear una aplicación de chat?

Preparando el entorno local:

Debido a que necesitamos implementar un gran modelo de código abierto localmente, es necesario preparar un entorno local bastante básico. El hardware requiere una tarjeta gráfica NVDIA con alto rendimiento y gran memoria de video, memoria de alta velocidad de gran capacidad y una unidad de estado sólido de gran capacidad. El software requiere la instalación de controladores de tarjeta gráfica, entornos CUDA y Python. Esta vez elegí ejecutar el modelo Baichuan-chat-13B como ejemplo. Mi configuración básica es CPU i9-13900K, tarjeta dual GTX3090 de 24 GB, memoria de 64 GB y unidad de estado sólido de 2 TB.

Un modelo de lenguaje grande (LLM):

Esta es la base sobre la que construimos aplicaciones LLM. Los diferentes LLM tienen diferentes estructuras de modelos y conocimientos aprendidos basados ​​en diferentes datos previos a la capacitación y tareas objetivo. Las aplicaciones de IA creadas en base a diferentes modelos también funcionarán de manera diferente. Puede encontrar los LLM de código abierto que le interesan a través de la popular comunidad de inteligencia artificial Hugging Face para probar y comparar capacidades.

Un servicio de inferencia que implementa LLM localmente: el servicio de inferencia puede cargar el modelo LLM previamente entrenado en el servidor local y proporcionar una interfaz de predicción del modelo, de modo que el modelo LLM se pueda usar localmente para realizar diversas tareas de PNL sin depender de los servicios en la nube. Puede utilizar algunos excelentes proyectos de código abierto de GitHub, que brindan implementación con un solo clic de servicios de inferencia para LLM de código abierto populares. Los que son relativamente conocidos y tienen muchas estrellas incluyen LocalAI, openLLM, etc.

Un "sistema operativo LLM" simple y fácil de usar, Dify.AI: si desea crear una aplicación de chat basada en capacidades LLM, es posible que deba estudiar el conjunto completo de pilas de tecnología LLM, como: llamadas API de diferentes modelos, selección de bases de datos vectoriales, investigación de tecnología de incorporación, etc. Si utiliza el proyecto de código abierto Dify.AI, puede guardar estas tareas de investigación y aprendizaje y ayudarle a crear rápidamente aplicaciones de IA basadas en diferentes capacidades de LLM a través de una interfaz visual. La última versión de Dify ha agregado soporte para LLM de código abierto. Todos los modelos alojados en HuggingFace y Replicate se pueden llamar y cambiar rápidamente. También admite la implementación local y puede crear aplicaciones de inteligencia artificial basadas en los servicios de inferencia de inferencia openLLM y Xorbits.

El autor intentará utilizar la plataforma LLMOps de código abierto Dify.AI, el servicio de inferencia de código abierto Xinference y el modelo de código abierto baichuan-chat-13B  como ejemplos para enseñarle paso a paso cómo crear una aplicación de chat LLM en un entorno Windows. . Sin más, pongámonos manos a la obra.

Preparación ambiental

Generalmente, Conda y Python básicos deberían estar disponibles. Sin embargo, este artículo presentará la configuración del entorno desde cero.

Configurar el entorno Python

Generalmente, se recomienda utilizar conda para la gestión de versiones de Python. Primero instale conda de acuerdo con la documentación del sitio web oficial de conda [1] . Luego use conda para inicializar el entorno Python 3.11:

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

Instalar CUDA

Se recomienda instalar directamente desde el sitio web oficial [2] . Windows 11 Seleccione la versión que se muestra a continuación.

Después de la instalación según el inicio, abra el "Panel de control de NVDIA -> Información del sistema" y compruebe que esté instalado.

Preparación WSL2

Se recomienda utilizar el entorno WSL2 para la implementación de Docker de Dify. Así que ahora instale WSL2 primero. Consulte las pautas oficiales de Microsoft [3] .

El primer paso es ejecutar CMD como administrador:

El segundo paso es instalar usando el comando en CMD:

wsl --install

Como resultado, podemos ver las distintas versiones del sistema compatibles.

适用于 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

Instalé la versión predeterminada de Ubuntu usando select:

wsl --install -d Ubuntu

Después de eso, puedes usar el comando "wsl" en CMD para ingresar a Ubuntu.

Paso 3. Instale el escritorio Docker

Vaya a la documentación oficial de Docker [4] para descargar "Docker Desktop". Al realizar la instalación, asegúrese de marcar la opción "Usar WSL 2 en lugar de Hyper-V". Una vez completada la instalación, reinicie la computadora. Compruebe si está instalado normalmente a través de CMD.

wsl -l --verbose

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

Puede ver que Ubuntu y Docker se ejecutan en WSL y se confirma que son versiones WSL2.

Paso 4: configurar el proxy para WSL

Dado que la dirección IP de WSL cambiará después de cada reinicio, podemos escribir un script para solucionarlo. Cambie la línea 4 a su propio número de puerto.

#!/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

El quinto paso es ingresar a Ubuntu, instalar conda y configurar python.

Al igual que con la preparación del entorno anterior, siga la documentación oficial para instalar conda y configurar Python, pero instale la versión de Linux.

Paso 6, instale CUDA para WSL

Vaya al sitio web oficial, seleccione la versión WSL-Ubuntu y siga las instrucciones para instalar usando la línea de comando.

Paso 7, instale PyTorch

Ingrese al sitio web oficial de PyTorch [5] e instale PyTorch de acuerdo con el entorno.

Esto completa la preparación del entorno.

Implementar el servicio de inferencia Xinference

Según la documentación de implementación de Dify [6] , Xinference admite bastantes modelos. Esta vez, elijamos Xinference y probemos baichuan-chat-3B.

La inferencia de Xorbits es un marco de inferencia distribuida potente y versátil diseñado para servir a grandes modelos de lenguaje, modelos de reconocimiento de voz y modelos multimodales, incluso en una computadora portátil. Admite una variedad de modelos compatibles con GGML, como ChatGLM, Baichuan, Whisper, Vicuna, Orca, etc. Dify admite la implementación local para acceder al razonamiento del modelo de lenguaje grande y a las capacidades de integración implementadas por Xinference.

Instalar Xinfernece

Ejecute el siguiente comando en WSL:

$ pip install "xinference"

El comando anterior instalará las dependencias básicas de Xinference para realizar inferencias. Xinference también admite "inferencia ggml" e "inferencia PyTorch". Debe instalar las siguientes dependencias:

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

Inicie Xinference y descargue e implemente el modelo baichuan-chat-3B

Ejecute el siguiente comando en WSL:

$ xinference -H 0.0.0.0

Xinference iniciará un trabajador localmente de forma predeterminada y el punto final es:

http://127.0.0.1:9997  ", el puerto predeterminado es "9997". De forma predeterminada, solo la computadora local puede acceder a él. Si se configura "-H 0.0.0.0", los clientes no locales pueden acceder a él a voluntad. Si necesita modificar más "host" o "puerto", puede ver la información de ayuda de 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 en el navegador: http://localhost:9997, seleccione baichuan-chat, pytorch, 13B, 4bit, haga clic en crear para implementar.

O implementar usando CLI:

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

Dado que los diferentes modelos tienen diferente compatibilidad en diferentes plataformas de hardware, verifique el modelo integrado de Xinference [7] para determinar si el modelo creado es compatible con la plataforma de hardware actual.

Utilice Xinference para gestionar modelos

Para ver todos los modelos implementados, en la línea de comando, ejecute el siguiente comando:

$ xinference list

Se mostrará información similar a la siguiente:

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" es el uid del modelo que se acaba de implementar.

Implementar Dify.AI

Para conocer el proceso principal, consulte el documento de implementación del sitio web oficial [8] .

Clonar Dificar

Clonar el código fuente de Dify a local

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

Iniciar Dify

Ingrese al directorio de la ventana acoplable del código fuente diferenciado y ejecute el comando de inicio con un solo clic:

cd dify/docker
docker compose up -d

Resultados de la implementación:

[+] 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

Finalmente verifique si todos los contenedores están funcionando correctamente:

docker compose ps

Estado de funcionamiento:

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 」。

Incluye 3 servicios empresariales "api/worker/web" y 4 componentes básicos "weaviate/db/redis/nginx".

Después de que Docker se inicie correctamente, visite: http://127.0.0.1/ en el navegador. Después de establecer una contraseña e iniciar sesión, ingresará a la página de lista de aplicaciones.

En este punto, Dify Community Edition se ha implementado con éxito utilizando Docker.

Conéctese a Xinference en Dify

Configurar proveedor de modelo

Complete la información del modelo en "Configuración > Proveedor del modelo > Xinference":

  • Nombre del modelo es el nombre que le da a la implementación de su modelo.
  • La URL del servidor es la dirección del punto final de xinference.
  • Model UID es el UID del modelo implementado obtenido a través de la lista de xinference

Cabe señalar que Sever Url no puede utilizar localhost. Porque si completa localhost, está accediendo al localhost en la ventana acoplable, lo que provocará que el acceso falle. La solución es cambiar la URL del servidor a la IP de la LAN. En un entorno WSL, debe utilizar la dirección IP de WSL.

Utilice el comando en WSL para obtener:

hostname -I
172.31.157.121

Utilice el chat de baichuan

Después de crear una aplicación, puede utilizar el modelo baichuan-chat-3B configurado en el paso anterior de la aplicación. En la interfaz de disposición de palabras de aviso de Dify, seleccione el modelo de chat de baichuan, diseñe la palabra de aviso de su aplicación (mensaje) y luego publique una aplicación de IA accesible.

Lo anterior es todo el proceso de implementación local de Dify y conexión al chat baichuan implementado por Xinference. En este punto, nuestra aplicación de chat basada en baichuan-chat-13B está básicamente completa.

posdata

Por supuesto, para una aplicación LLM de nivel de producción, no es suficiente simplemente completar el acceso, la inferencia y la interacción de chat del modelo grande. También necesitamos ajustar específicamente las indicaciones de LLM, agregar datos privados como contexto o ajustar el propio LLM, lo que requiere iteración y optimización a largo plazo para hacer que el rendimiento de la aplicación LLM sea cada vez mejor. Como plataforma de herramientas de middleware, Dify.AI proporciona un sistema operativo visual para una pila completa de tecnología de aplicaciones LLM. Una vez completada la implementación del servicio básico anterior, se pueden completar iteraciones y mejoras posteriores de la aplicación basadas en Dify, lo que hace que la construcción y administración de las aplicaciones LLM sean más simples y fáciles de usar. La limpieza se puede completar automáticamente cargando directamente los datos comerciales. Después del procesamiento , en el futuro también se proporcionarán servicios de mejora y anotación de datos, e incluso su equipo empresarial podrá participar en la colaboración.

En la actualidad, el desarrollo y la aplicación de LLM aún se encuentran en una etapa muy temprana. Creo que en un futuro cercano, ya sea el lanzamiento de capacidades de LLM o la mejora continua de las capacidades de varias herramientas basadas en LLM, el umbral para Los desarrolladores seguirán reduciéndose para explorar las capacidades de LLM, lo que permitirá que surjan más aplicaciones de IA con escenarios ricos.


Si te gusta Dify, bienvenido:

  • Contribuya con código en GitHub y cree un Dify mejor con nosotros;
  • Comparte Dify y tu experiencia con tus amigos a través de actividades en línea y fuera de línea y redes sociales;
  • Danos un saludo en GitHub ⭐️

También puedes contactar al asistente de Dify y unirte a nuestro chat de grupo de amigos para compartir experiencias entre ellos:

Supongo que te gusta

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