Torchchat es una pequeña base de código que muestra la capacidad de ejecutar modelos de idiomas grandes (LLM) sin problemas. Con TorchChat, puede ejecutar LLM usando Python, dentro de su propia aplicación (C/C ++) (escritorio o servidor) y en iOS y Android.
Importante
Actualización 25 de septiembre de 2024: Torchchat tiene soporte multimodal para LLAMA3.2 11B !!
Para probarlo, finalice la sección de instalación a continuación, luego salga a nuestra guía multimodal para obtener más información.
Los siguientes modelos son compatibles con Torchchat y tienen alias asociados.
| Modelo | Amigable para dispositivos móviles | Notas |
|---|---|---|
| Meta-llama/meta-llama-3.2-3b-instructo | ✅ | Sintonizado para chat . Alias a llama3.2-3b . |
| meta-llama/meta-llama-3.2-3b | ✅ | Mejor para generate . Alias a llama3.2-3b-base . |
| Meta-llama/Llama-Guard-3-1b | ✅ | Sintonizado para la clasificación. Alias a llama3-1b-guard . |
| Meta-llama/meta-llama-3.2-1b-instructo | ✅ | Sintonizado para chat . Alias a llama3.2-1b . |
| meta-llama/meta-llama-3.2-1b | ✅ | Mejor para generate . Alias a llama3.2-1b-base . |
| Meta-llama/llama-3.2-11b-visión-instructo | Multimodal (imagen + texto). Sintonizado para chat . Alias a llama3.2-11B . | |
| meta-llama/llama-3.2-11b-visión | Multimodal (imagen + texto). Sintonizado para generate . Alias a llama3.2-11B-base . | |
| Meta-llama/meta-llama-3.1-8b-instructo | ✅ | Sintonizado para chat . Alias a llama3.1 . |
| meta-llama/meta-llama-3.1-8b | ✅ | Mejor para generate . Alias a llama3.1-base . |
| Meta-llama/meta-llama-3-8b-Instructo | ✅ | Sintonizado para chat . Alias a llama3 . |
| meta-llama/meta-llama-3-8b | ✅ | Mejor para generate . Alias a llama3-base . |
| Meta-llama/Llama-2-7B-CHAT-HF | ✅ | Sintonizado para chat . Alias a llama2 . |
| Meta-llama/Llama-2-13B-CHAT-HF | Sintonizado para chat . Alias a llama2-13b-chat . | |
| Meta-llama/Llama-2-70B-CHAT-HF | Sintonizado para chat . Alias a llama2-70b-chat . | |
| Meta-llama/Llama-2-7B-HF | ✅ | Mejor para generate . Alias a llama2-base . |
| Meta-llama/Codellama-7b-Python-HF | ✅ | Sintonizado para Python y generate . Alias a codellama . |
| MetaLama/Codellama-34B-Python-HF | ✅ | Sintonizado para Python y generate . Alias a codellama-34b . |
| Mistralai/Mistral-7B-V0.1 | ✅ | Mejor para generate . Alias a la mistral-7b-v01-base . |
| Mistralai/Mistral-7B-Instructo-V0.1 | ✅ | Sintonizado para chat . Alias a la mistral-7b-v01-instruct . |
| Mistralai/Mistral-7B-Instructo-V0.2 | ✅ | Sintonizado para chat . Alias a mistral . |
| tinllamas/historias15m | ✅ | Modelo de juguete para generate . Alias a stories15M . |
| tinllamas/historias42m | ✅ | Modelo de juguete para generate . Alias a stories42M . |
| tinllamas/historias110m | ✅ | Modelo de juguete para generate . Alias a stories110M . |
| OpenLM-Research/Open_LLAMA_7B | ✅ | Mejor para generate . Alias para open-llama . |
Los siguientes pasos requieren que tenga instalado Python 3.10.
Consejo
Torchchat utiliza los últimos cambios de varios proyectos de Pytorch, por lo que se recomienda altamente que use un VenV (mediante el uso de los comandos a continuación) o conda.
git clone https://github.com/pytorch/torchchat.git
cd torchchat
python3 -m venv .venv
source .venv/bin/activate
./install/install_requirements.shLas interfaces de Torchchat se aprovechan a través de comandos de Python y corredores nativos . Mientras que los comandos de Python son enumerables en el menú --help, estos últimos se exploran en sus respectivas secciones.
python3 torchchat.py --help # Output
usage: torchchat [-h] {chat,browser,generate,export,eval,download,list,remove,where,server} ...
positional arguments:
{chat,browser,generate,export,eval,download,list,remove,where,server}
The specific command to run
chat Chat interactively with a model via the CLI
generate Generate responses from a model given a prompt
browser Chat interactively with a model in a locally hosted browser
export Export a model artifact to AOT Inductor or ExecuTorch
download Download model artifacts
list List all supported models
remove Remove downloaded model artifacts
where Return directory containing downloaded model artifacts
server [WIP] Starts a locally hosted REST server for model interaction
eval Evaluate a model via lm-eval
options:
-h, --help show this help message and exitInferencia de Python (chat, generar, navegador, servidor)
Exportación (exportación)
Gestión de inventario (descargar, lista, eliminar, dónde)
Evaluación (eval)
La mayoría de los modelos usan la cara de abrazo como canal de distribución, por lo que deberá crear una cuenta de cara de abrazo. Cree un token de acceso a los usuarios de la cara abrazada como se documenta aquí con el rol write .
Inicie sesión en la cara abrazada:
huggingface-cli login
Eche un vistazo a los modelos disponibles:
python3 torchchat.py listLuego descargue uno para pruebas (este readMe usa Llama3.1)
python3 torchchat.py download llama3.1
Nota
Este comando puede solicitarle que solicite acceso a Llama 3 a través de abrazando la cara, si aún no tiene acceso. Simplemente siga las indicaciones y vuelva a ejecutar el comando cuando se otorga el acceso.*
Este subcomando muestra la ubicación de un modelo particular.
python3 torchchat.py where llama3.1Esto es útil en los scripts cuando no desea codificar las rutas
Este subcomando elimina el modelo especificado
python3 torchchat.py remove llama3.1 Se puede encontrar más información sobre estos comandos agregando la opción --help .
La forma más sencilla de ejecutar un modelo en Pytorch es a través de una ejecución ansiosa. Este es el modo de ejecución predeterminado para Pytorch y Torchchat. Realiza inferencia sin crear artefactos de exportación o usar un corredor separado.
El modelo utilizado para la inferencia también se puede configurar y adaptarse a necesidades específicas (compilación, cuantificación, etc.). Consulte la guía de personalización para las opciones admitidas por Torchchat.
Consejo
Para obtener más información sobre estos comandos, consulte el menú --help .
Este modo le permite chatear con un LLM de manera interactiva.
python3 torchchat.py chat llama3.1Este modo genera texto basado en un mensaje de entrada.
python3 torchchat.py generate llama3.1 --prompt " write me a story about a boy and his bear "Este modo expone una API REST para interactuar con un modelo. El servidor sigue la especificación de la API de OpenAI para completar el chat.
Para probar la API REST, necesitará 2 terminales : uno para alojar el servidor y otro para enviar la solicitud. En un terminal, inicie el servidor
python3 torchchat.py server llama3.1shell predeterminado: python3 torchchat.py server llama3.1 & server_pid = $! ; dormir 90 # Espere a que el servidor esté listo para aceptar solicitudes
En otro terminal, consulte el servidor con curl . Dependiendo de la configuración del modelo, esta consulta puede tardar unos minutos en responder.
Nota
Dado que esta característica está en desarrollo activo, no se consumen todos los parámetros. Consulte API/API.PY para obtener detalles sobre qué parámetros de solicitud se implementan. Si encuentra algún problema, comente sobre el problema de seguimiento de GitHub.
Establecer stream en "verdadero" en la solicitud emite una respuesta en fragmentos. Si stream no es "o no" verdadera ", entonces el cliente esperará la respuesta completa del servidor.
Ejemplo de entrada + salida
curl http://127.0.0.1:5000/v1/chat/completions
-H "Content-Type: application/json"
-d '{
"model": "llama3.1",
"stream": "true",
"max_tokens": 200,
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Hello!"
}
]
}'
{"response":" I'm a software developer with a passion for building innovative and user-friendly applications. I have experience in developing web and mobile applications using various technologies such as Java, Python, and JavaScript. I'm always looking for new challenges and opportunities to learn and grow as a developer.nnIn my free time, I enjoy reading books on computer science and programming, as well as experimenting with new technologies and techniques. I'm also interested in machine learning and artificial intelligence, and I'm always looking for ways to apply these concepts to real-world problems.nnI'm excited to be a part of the developer community and to have the opportunity to share my knowledge and experience with others. I'm always happy to help with any questions or problems you may have, and I'm looking forward to learning from you as well.nnThank you for visiting my profile! I hope you find my information helpful and interesting. If you have any questions or would like to discuss any topics, please feel free to reach out to me. I"}
shell predeterminado: kill $ {server_pid}
Este comando abre una interfaz básica del navegador para el chat local consultando un servidor local.
Primero, siga los pasos en la sección del servidor anterior para iniciar un servidor local. Luego, en otro terminal, inicie la interfaz. Ejecutar lo siguiente abrirá una pestaña en su navegador.
streamlit run torchchat/usages/browser.py
Use el control deslizante "Tokens de respuesta máxima" para limitar el número máximo de tokens generados por el modelo para cada respuesta. Haga clic en el botón "Restablecer chat" para eliminar el historial de mensajes e iniciar un chat nuevo.
AOTI compila modelos antes de la ejecución para una inferencia más rápida. El proceso crea un archivo PT2 con cremallera que contiene todos los artefactos generados por AotInductor, y un archivo .sO con el contenido ejecutable que luego se carga para inferencia. Esto se puede hacer con los entornos de Python y C ++.
El siguiente ejemplo exporta y ejecuta el modelo LLAMA3.1 8B de instrucciones. El primer comando compila y realiza la exportación real.
python3 torchchat.py export llama3.1 --output-aoti-package-path exportedModels/llama3_1_artifacts.pt2Nota
Si su máquina tiene CUDA, agregue este indicador para el rendimiento --quantize torchchat/quant_config/cuda.json al exportar.
Para obtener más detalles sobre la cuantización y qué configuración usar para su caso de uso, visite nuestra Guía de personalización.
Para ejecutarse en un entorno de Python, use el subcomando Generar como antes, pero incluya el archivo PT2.
python3 torchchat.py generate llama3.1 --aoti-package-path exportedModels/llama3_1_artifacts.pt2 --prompt " Hello my name is "Para ejecutar en un entorno C ++, necesitamos construir el binario de corredores.
torchchat/utils/scripts/build_native.sh aotiLuego ejecute el ejecutable compilado, con el PT2.
cmake-out/aoti_run exportedModels/llama3_1_artifacts.pt2 -z ` python3 torchchat.py where llama3.1 ` /tokenizer.model -l 3 -i " Once upon a time " Ejecutorch le permite optimizar su modelo para su ejecución en un dispositivo móvil o integrado.
Antes de ejecutar cualquier comando en Torchchat que requiera Ejecutorch, primero debe instalar ejecutor.
Para instalar Executorch, ejecute los siguientes comandos. Esto descargará el repositorio del ejecutor a ./et-build/src e instalará varias bibliotecas de ejecutorch a ./et-build/install.
Importante
Los siguientes comandos deben ejecutarse desde el directorio root de Torchchat.
export TORCHCHAT_ROOT=${PWD}
./torchchat/utils/scripts/install_et.sh
Similar a AOTI, para implementar en el dispositivo, primero exportamos el artefacto de PTE, luego cargamos el artefacto para la inferencia.
El siguiente ejemplo utiliza el modelo LLAMA3.1 8B de instrucciones.
# Export
python3 torchchat.py export llama3.1 --quantize torchchat/quant_config/mobile.json --output-pte-path llama3.1.pte
Nota
Utilizamos --quantize torchchat/quant_config/mobile.json para cuantificar el modelo LLAMA3.1 para reducir el tamaño del modelo y mejorar el rendimiento de los casos de uso en el dispositivo.
Para obtener más detalles sobre la cuantización y qué configuración usar para su caso de uso, visite nuestra Guía de personalización.
Si bien el ejecutor no se centra en la inferencia de escritorio, es capaz de hacerlo. Esto es útil para probar modelos PTE sin enviarlos a un dispositivo físico.
Específicamente, hay 2 formas de hacerlo: puro pitón y a través de un corredor
# Execute
python3 torchchat.py generate llama3.1 --pte-path llama3.1.pte --prompt "Hello my name is"
Construye el corredor
torchchat/utils/scripts/build_native.sh etEjecutar usando el corredor
cmake-out/et_run llama3.1.pte -z ` python3 torchchat.py where llama3.1 ` /tokenizer.model -l 3 -i " Once upon a time "Lo siguiente supone que ha completado los pasos para configurar Ejecutorch.
.dmg y mueva la aplicación CMake a /Applications .sudo /Applications/CMake.app/Contents/bin/cmake-gui --installincreased-memory-limit . Abra el proyecto Xcode:
open et-build/src/executorch/examples/demo-apps/apple_ios/LLaMA/LLaMA.xcodeprojNota: Si se encuentra con algún problema relacionado con las dependencias de paquetes, cierre Xcode, limpie algunos de los cachés y/o los productos de compilación, y vuelva a abrir el proyecto XCode:
rm -rf ~ /Library/org.swift.swiftpm ~ /Library/Caches/org.swift.swiftpm ~ /Library/Caches/com.apple.dt.Xcode ~ /Library/Developer/Xcode/DerivedData
Haga clic en el botón Reproducir para iniciar la aplicación en el simulador.
Para ejecutarse en un dispositivo, asegúrese de tenerlo configurado para el desarrollo y un perfil de aprovisionamiento con el derecho a increased-memory-limit . Actualice el identificador de paquete de la aplicación para que coincida con su perfil de aprovisionamiento con la capacidad requerida.
Después de lanzar con éxito la aplicación, copie los archivos de Modelo de Ejecutor exportado ( .pte ) y Tokenizer ( .model ) a la carpeta Illama. Puede encontrar el archivo modelo llamado llama3.1.pte en el directorio torchchat actual y el archivo de tokenizador a $(python3 torchchat.py where llama3.1)/tokenizer.model Path.
On My iPhone > iLLaMA .Siga las pautas de la UI de la aplicación para seleccionar el modelo y los archivos de tokenizer desde el sistema de archivos local y emitir un mensaje.
¡Haga clic en la imagen a continuación para verla en acción!
Lo siguiente supone que ha completado los pasos para configurar Ejecutorch.
Descargue el archivo AAR, que contiene la biblioteca Java y la biblioteca JNI correspondiente, para construir y ejecutar la aplicación.
Mueva el archivo AAR descargado a torchchat/edge/android/torchchat/app/libs/ . Es posible que deba crear directorio torchchat/edge/android/torchchat/app/libs/ si no existe.
Empuje el modelo y el archivo de tokenizador a su dispositivo. Puede encontrar el archivo modelo llamado llama3.1.pte en el directorio torchchat actual y el archivo de tokenizador a $(python3 torchchat.py where llama3.1)/tokenizer.model Path.
adb shell mkdir -p /data/local/tmp/llama
adb push <model.pte> /data/local/tmp/llama
adb push <tokenizer.model or tokenizer.bin> /data/local/tmp/llama
Use Android Studio para abrir el esqueleto de la aplicación Torchchat, ubicado en torchchat/edge/android/torchchat .
Haga clic en el botón Reproducir (^r) para iniciarlo al emulador/dispositivo.
Siga las pautas de la UI de la aplicación para elegir el modelo y los archivos de tokenizador del sistema de archivos local. Luego emita un aviso.
Nota: El archivo AAR que figura en el Paso 1 tiene el tokenizador Tiktoken y SentensePiece. Para ajustar o usar un tokenizador y tiempo de ejecución personalizados, modifique el código del ejecutor y use este script para construir la biblioteca AAR.
Alternativamente, puede ejecutar torchchat/utils/scripts/android_example.sh que configura Java, Android SDK Manager, Android SDK, Android Emulator (si no se encuentra ningún dispositivo físico), crea la aplicación y la inicia para usted. Se puede usar si no tiene una GUI.
export TORCHCHAT_ROOT=$(pwd)
sh torchchat/utils/scripts/android_example.sh
Nota: Esta característica sigue siendo un trabajo en progreso y no todas las características están funcionando
Utiliza la biblioteca LM_EVAL para evaluar la precisión del modelo en una variedad de tareas. El valor predeterminado a Wikitext y se puede controlar manualmente utilizando las tareas y limitar los ARG. Ver evaluación
Ejemplos
Modo ansioso:
python3 torchchat.py eval llama3.1 --dtype fp32 --limit 5
Para probar la perplejidad de un modelo reducido o cuantificado, pasárselo de la misma manera que generaría:
python3 torchchat.py eval llama3.1 --pte-path llama3.1.pte --limit 5
Torchchat encarna los detalles de la filosofía de diseño de Pytorch, especialmente "usabilidad sobre todo lo demás".
Torchchat es una biblioteca nativa de Pytorch. Si bien proporcionamos integraciones con el ecosistema circundante (por ejemplo, los modelos de cara de abrazo, etc.), toda la funcionalidad central está escrita en Pytorch.
Torchchat está diseñado para ser fácil de entender, usar y extender.
Torchchat proporciona componentes bien probados con una barra alta en la corrección. Proporcionamos
Realmente valoramos nuestra comunidad y las contribuciones hechas por nuestros maravillosos usuarios. ¡Usaremos esta sección para llamar a algunas de estas contribuciones! Si desea ayudar también, consulte la guía contribuyente.
Para conectarse con nosotros y otros miembros de la comunidad, lo invitamos a unirse a nuestra comunidad Slack completando este formulario. Una vez que te hayas unido, puedes:
#torchchat-general para preguntas generales, discusión y apoyo comunitario.#torchchat-contributors si está interesado en contribuir directamente al desarrollo del proyecto.¡Espero poder discutir con usted sobre Torchchat Future!
Una sección de errores/excepciones de configuración comúnmente encontrados. Si esta sección no contiene su situación, verifique los problemas de GitHub
El acceso al modelo está restringido y no está en la lista autorizada
Algunos modelos requieren un paso adicional para acceder. Siga el enlace proporcionado en el error para obtener acceso.
Rueda de construcción fallida
If ./torchchat/utils/scripts/install_et.sh falla con un error como Building wheel for executorch (pyproject.toml) did not run successfully es posible que se vincule a una versión anterior de PyTorch instaló otra forma como a través de HomeBrew. Puede romper el enlace desinstalando otras versiones, como brew uninstall pytorch nota: puede romper algo que depende de esto, así que tenga en cuenta.
Certificado_verify_failed
Ejecute pip install --upgrade certifi .
Si encuentra errores o dificultades con Torchchat, presente un problema de GitHub.
Incluya el comando exacto que ejecutó y la salida de ese comando. Además, ejecute este script e incluya la salida guardada en system_info.txt para que podamos depurar mejor su problema.
(echo "Operating System Information"; uname -a; echo ""; cat /etc/os-release; echo ""; echo "Python Version"; python --version || python3 --version; echo ""; echo "PIP Version"; pip --version || pip3 --version; echo ""; echo "Installed Packages"; pip freeze || pip3 freeze; echo ""; echo "PyTorch Version"; python -c "import torch; print(torch.__version__)" || python3 -c "import torch; print(torch.__version__)"; echo ""; echo "Collection Complete") > system_info.txt
El contenido del repositorio de Torchchat se proporciona sin garantías sobre el rendimiento o la compatibilidad. En particular, Torchchat pone a disposición arquitecturas de modelos escritas en Python para Pytorch que pueden no funcionar de la misma manera o cumplen con los mismos estándares que las versiones originales de esos modelos. Al utilizar el contenido del repositorio de Torchchat, incluidas las arquitecturas de modelos, usted es el único responsable de determinar la idoneidad de usar o redistribuir el contenido del repositorio de Torchchat y asumir cualquier riesgo asociado con su uso del contenido del apositorio de Torchchat o cualquier modelos, resultados o resultados, tanto solo como en combinación con cualquier otra tecnología. Además, puede tener otras obligaciones legales que rigen su uso de otro contenido, como los términos de servicio para modelos de terceros, pesos, datos u otras tecnologías, y usted es el único responsable de cumplir con todas esas obligaciones.
Gracias a la comunidad por todas las increíbles bibliotecas y herramientas que ha construido alrededor de la inferencia local de LLM.
Georgi Gerganov y su proyecto GGML brillan en la habilitación basada en la comunidad e inspirando tantos otros proyectos.
Andrej Karpathy y su proyecto LLAMA2.C. Tantas ideas geniales (¡y simples!) En Llama2.C que hemos adoptado directamente (tanto ideas como código) de su repositorio. Nunca puedes equivocarte siguiendo el trabajo de Andrej.
Michael Gschwind, Bert Maher, Scott Wolchok, Bin Bao, Chen Yang, Huamin Li y Mu-Chu Li, que construyeron la primera versión de Nanogpt ( DSOGPT ) con inductores de AOT que demuestra que AOTI puede usarse para construir LLMS eficientes, y los DSO son un formato de distribución agradable para modelos. nanogpt.
Bert Maher y su Llama2.so, que se basó en el Llama2.C de Andrej y en DSOGPT para cerrar el bucle en modelos LLAMA con Aotinductor.
Christian Puhrsch, Horace He, Joe Isaacson y muchas más por sus muchas contribuciones en acelerar los modelos Genai en el "¡Cualquier cosa, rápido!" Pytorch.org blogs, y, en particular, Horace él para GPT, Fast!, que hemos adoptado directamente (tanto ideas como código) de su repositorio.
Torchchat se libera bajo la licencia BSD 3. (El código adicional en esta distribución está cubierto por las licencias de código abierto del MIT y Apache). Sin embargo, puede tener otras obligaciones legales que rigen su uso del contenido, como los términos de servicio para modelos de terceros.