O Torchchat é uma pequena base de código que mostra a capacidade de executar grandes modelos de linguagem (LLMS) sem problemas. Com o TorchChat, você pode executar o LLMS usando Python, dentro do seu próprio aplicativo (C/C ++) (Desktop ou Server) e no iOS e Android.
Importante
ATUALIZAÇÃO 25 de setembro de 2024: Torchchat tem suporte multimodal para llama3.2 11b !!
Para experimentar, termine a seção de instalação abaixo e depois vá para o nosso guia multimodal para saber mais.
Os modelos a seguir são suportados pelo Torchchat e possuem aliases associados.
| Modelo | Amigável para dispositivos móveis | Notas |
|---|---|---|
| meta-llama/meta-llama-3.2-3b-instrução | ✅ | Sintonizado para chat . Alias para llama3.2-3b . |
| meta-llama/meta-llama-3.2-3b | ✅ | Melhor para generate . Alias para llama3.2-3b-base . |
| meta-llama/llama-guard-3-1b | ✅ | Sintonizado para classificação. Alias para llama3-1b-guard . |
| meta-llama/meta-llama-3.2-1b-instrução | ✅ | Sintonizado para chat . Alias para llama3.2-1b . |
| meta-llama/meta-llama-3.2-1b | ✅ | Melhor para generate . Alias para llama3.2-1b-base . |
| meta-llama/llama-3.2-11b-vision-instruct | Multimodal (imagem + texto). Sintonizado para chat . Alias para llama3.2-11B . | |
| META-LLAMA/LLAMA-3.2-11B-VISION | Multimodal (imagem + texto). Sintonizado para generate . Alias para llama3.2-11B-base . | |
| meta-llama/meta-llama-3.1-8b-instrução | ✅ | Sintonizado para chat . Alias para llama3.1 . |
| meta-llama/meta-llama-3.1-8b | ✅ | Melhor para generate . Alias para llama3.1-base . |
| meta-llama/meta-llama-3-8b-instruct | ✅ | Sintonizado para chat . Alias para llama3 . |
| meta-llama/meta-llama-3-8b | ✅ | Melhor para generate . Alias para llama3-base . |
| meta-llama/llama-2-7b-chat-hf | ✅ | Sintonizado para chat . Alias para llama2 . |
| meta-llama/llama-2-13b-chat-hf | Sintonizado para chat . Alias para llama2-13b-chat . | |
| meta-llama/llama-2-70b-chat-hf | Sintonizado para chat . Alias para llama2-70b-chat . | |
| meta-llama/llama-2-7b-hf | ✅ | Melhor para generate . Alias para llama2-base . |
| meta-llama/codellama-7b-python-hf | ✅ | Sintonizado para Python e generate . Alias para codellama . |
| meta-llama/codellama-34b-python-hf | ✅ | Sintonizado para Python e generate . Alias para codellama-34b . |
| Mistralai/Mistral-7b-V0.1 | ✅ | Melhor para generate . Alias para mistral-7b-v01-base . |
| Mistralai/Mistral-7B-Instruct-V0.1 | ✅ | Sintonizado para chat . Alias para mistral-7b-v01-instruct . |
| Mistralai/Mistral-7b-Instruct-V0.2 | ✅ | Sintonizado para chat . Alias para mistral . |
| Tinyllamas/Stories15m | ✅ | Modelo de brinquedo para generate . Alias para stories15M . |
| Tinyllamas/Stories42m | ✅ | Modelo de brinquedo para generate . Alias para stories42M . |
| Tinyllamas/Stories110m | ✅ | Modelo de brinquedo para generate . Alias para stories110M . |
| Openlm-research/open_llama_7b | ✅ | Melhor para generate . Pseudônimo para open-llama . |
As etapas a seguir exigem que você tenha o Python 3.10 instalado.
Dica
O Torchchat usa as alterações mais recentes de vários projetos Pytorch, para que você use um VENV (usando os comandos abaixo) ou CONDA.
git clone https://github.com/pytorch/torchchat.git
cd torchchat
python3 -m venv .venv
source .venv/bin/activate
./install/install_requirements.shAs interfaces do Torchchat são alavancadas por comandos Python e corredores nativos . Enquanto os comandos python são enumeráveis no menu -help, os últimos são explorados em suas respectivas seções.
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 exitInferência de Python (bate -papo, gerar, navegador, servidor)
Exportação (exportação)
Gerenciamento de inventário (download, lista, remova, onde)
Avaliação (Eval)
A maioria dos modelos usa o Face Hugging como o canal de distribuição, portanto, você precisará criar uma conta de rosto de abraço. Crie um token de acesso ao usuário de face abraça, conforme documentado aqui com a função write .
Faça login no rosto abraçando:
huggingface-cli login
Dê uma olhada nos modelos disponíveis:
python3 torchchat.py listEm seguida, faça o download de um para testes (este readme usa llama3.1)
python3 torchchat.py download llama3.1
Observação
Este comando pode solicitar que você solicite acesso ao LLAMA 3 através do Hugging Face, se você ainda não tiver acesso. Simplesmente siga as solicitações e execute novamente o comando quando o acesso for concedido.*
Este subcomando mostra a localização de um modelo específico.
python3 torchchat.py where llama3.1Isso é útil em scripts quando você não deseja caminhos de código rígido
Este subcomando remove o modelo especificado
python3 torchchat.py remove llama3.1 Mais informações sobre esses comandos podem ser encontradas adicionando a opção --help .
A maneira mais simples de executar um modelo em Pytorch é através da execução ansiosa. Este é o modo de execução padrão para Pytorch e Torchchat. Ele realiza inferência sem criar artefatos exportadores ou usar um corredor separado.
O modelo usado para inferência também pode ser configurado e adaptado a necessidades específicas (compilação, quantização, etc.). Consulte o Guia de Personalização para as opções suportadas pelo Torchchat.
Dica
Para obter mais informações sobre esses comandos, consulte o menu --help .
Este modo permite que você converse com um LLM de maneira interativa.
python3 torchchat.py chat llama3.1Este modo gera texto com base em um prompt de entrada.
python3 torchchat.py generate llama3.1 --prompt " write me a story about a boy and his bear "Este modo expõe uma API REST para interagir com um modelo. O servidor segue a especificação da API do OpenAI para conclusões do bate -papo.
Para testar a API REST, você precisará de 2 terminais : um para hospedar o servidor e outro para enviar a solicitação. Em um terminal, inicie o servidor
python3 torchchat.py server llama3.1Padrão do shell: python3 Torchchat.py servidor llama3.1 & server_pid = $! ; Dormir 90 # Aguarde para que o servidor esteja pronto para aceitar solicitações
Em outro terminal, consulte o servidor usando curl . Dependendo da configuração do modelo, essa consulta pode levar alguns minutos para responder.
Observação
Como esse recurso está sob desenvolvimento ativo, nem todo parâmetro é consumido. Consulte API/API.PY para obter detalhes sobre quais parâmetros de solicitação são implementados. Se você encontrar algum problema, comente o problema do Github de rastreamento.
Definir stream para "true" na solicitação emite uma resposta em pedaços. Se stream não for definido ou não "verdadeiro", o cliente aguardará a resposta completa do servidor.
Exemplo de entrada + saída
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 Padrão: Mate $ {server_pid}
Este comando abre uma interface básica do navegador para bate -papo local, consultando um servidor local.
Primeiro, siga as etapas na seção do servidor acima para iniciar um servidor local. Em seguida, em outro terminal, inicie a interface. A execução do seguinte abrirá uma guia no seu navegador.
streamlit run torchchat/usages/browser.py
Use o controle deslizante "Tokens máximo de resposta" para limitar o número máximo de tokens gerados pelo modelo para cada resposta. Clique no botão "Reset Chat" para remover o histórico da mensagem e iniciar um novo bate -papo.
AOTI compila modelos antes da execução para uma inferência mais rápida. O processo cria um arquivo PT2 com zíper que contém todos os artefatos gerados pelo AOTinductor e um arquivo .SO com o conteúdo executável que é então carregado para inferência. Isso pode ser feito com ambos os ambientes Python e C ++.
O exemplo a seguir exporta e executa o modelo LLAMA3.1 8B Instruct. O primeiro comando compila e executa a exportação real.
python3 torchchat.py export llama3.1 --output-aoti-package-path exportedModels/llama3_1_artifacts.pt2Observação
Se sua máquina tiver CUDA, adicione este sinalizador para desempenho --quantize torchchat/quant_config/cuda.json ao exportar.
Para obter mais detalhes sobre quantização e quais configurações usar para o seu caso de uso, visite nosso guia de personalização.
Para ser executado em um Enviroment Python, use o subcomando gerar como antes, mas inclua o arquivo pt2.
python3 torchchat.py generate llama3.1 --aoti-package-path exportedModels/llama3_1_artifacts.pt2 --prompt " Hello my name is "Para executar em um ambiente C ++, precisamos construir o corredor binário.
torchchat/utils/scripts/build_native.sh aotiEm seguida, execute o executável compilado, com o 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 " O Executorch permite otimizar seu modelo para execução em um dispositivo móvel ou incorporado.
Antes de executar qualquer comandos no Torchchat que requerem executorch, você deve primeiro instalar o Execortorch.
Para instalar o Execortorch, execute os seguintes comandos. Isso baixará o repo Executorch para ./et-build/src e instalará várias bibliotecas de executorch em ./et-build/install.
Importante
Os seguintes comandos devem ser executados no diretório raiz do Torchchat.
export TORCHCHAT_ROOT=${PWD}
./torchchat/utils/scripts/install_et.sh
Semelhante ao AOTI, para implantar no dispositivo, primeiro exportamos o artefato PTE e depois carregamos o artefato para inferência.
O exemplo a seguir usa o modelo LLAMA3.1 8B Instruct.
# Export
python3 torchchat.py export llama3.1 --quantize torchchat/quant_config/mobile.json --output-pte-path llama3.1.pte
Observação
Utilizamos --quantize torchchat/quant_config/mobile.json para quantizar o modelo LLAMA3.1 para reduzir o tamanho do modelo e melhorar o desempenho para casos de uso no dispositivo.
Para obter mais detalhes sobre quantização e quais configurações usar para o seu caso de uso, visite nosso guia de personalização.
Embora o Execortorch não se concentre na inferência da área de trabalho, é capaz de fazê -lo. Isso é útil para testar os modelos PTE sem enviá -los para um dispositivo físico.
Especificamente, existem 2 maneiras de fazê -lo: python puro e através de um corredor
# Execute
python3 torchchat.py generate llama3.1 --pte-path llama3.1.pte --prompt "Hello my name is"
Construa o corredor
torchchat/utils/scripts/build_native.sh etExecutar usando o corredor
cmake-out/et_run llama3.1.pte -z ` python3 torchchat.py where llama3.1 ` /tokenizer.model -l 3 -i " Once upon a time "O seguinte pressupõe que você concluiu as etapas para configurar o Executorch.
.dmg e mova o aplicativo CMake para a pasta /Applications .sudo /Applications/CMake.app/Contents/bin/cmake-gui --installincreased-memory-limit . Abra o projeto Xcode:
open et-build/src/executorch/examples/demo-apps/apple_ios/LLaMA/LLaMA.xcodeprojNOTA: Se você estiver tendo problemas relacionados a dependências de pacotes, feche o Xcode, limpe alguns dos caches e/ou os produtos de construção e abra o projeto Xcode novamente:
rm -rf ~ /Library/org.swift.swiftpm ~ /Library/Caches/org.swift.swiftpm ~ /Library/Caches/com.apple.dt.Xcode ~ /Library/Developer/Xcode/DerivedData
Clique no botão Play para iniciar o aplicativo no simulador.
Para executar em um dispositivo, verifique se você está configurado para o desenvolvimento e um perfil de provisionamento com o increased-memory-limit . Atualize o identificador de pacote do aplicativo para corresponder ao seu perfil de provisionamento com a capacidade necessária.
Depois de lançar com êxito o aplicativo, copie os arquivos exportados do Executorch Model ( .pte ) e tokenizer ( .model ) para a pasta Illama. Você pode encontrar o arquivo de modelo chamado llama3.1.pte no diretório atual torchchat e no arquivo tokenizer em $(python3 torchchat.py where llama3.1)/tokenizer.model Path.
On My iPhone > iLLaMA .Siga as diretrizes da interface do usuário do aplicativo para selecionar os arquivos modelo e tokenizer do sistema de arquivos local e emitir um prompt.
Clique na imagem abaixo para vê -la em ação!
O seguinte pressupõe que você concluiu as etapas para configurar o Executorch.
Faça o download do arquivo AAR, que contém a biblioteca Java e a biblioteca JNI correspondente, para criar e executar o aplicativo.
Mova o arquivo AAR baixado para torchchat/edge/android/torchchat/app/libs/ . Pode ser necessário criar torchchat/edge/android/torchchat/app/libs/ se ele não existir.
Empurre o arquivo de modelo e tokenizador para o seu dispositivo. Você pode encontrar o arquivo de modelo chamado llama3.1.pte no diretório atual torchchat e no arquivo tokenizer em $(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 o Android Studio para abrir o esqueleto do aplicativo Torchchat, localizado em torchchat/edge/android/torchchat .
Clique no botão play (^r) para iniciá -lo no emulador/dispositivo.
Siga as diretrizes da interface do usuário do aplicativo para escolher os arquivos de modelo e tokenizer no sistema de arquivos local. Em seguida, emita um prompt.
NOTA: O arquivo AAR listado na Etapa 1 possui o TikToken e o SentensepiCle Tokenizer. Para ajustar ou usar um tokenizador e tempo de execução personalizados, modifique o código ExecUDORCH e use este script para criar a biblioteca AAR.
Como alternativa, você pode executar torchchat/utils/scripts/android_example.sh , que configura o Java, o Android SDK Manager, o Android SDK, o emulador Android (se nenhum dispositivo físico for encontrado), constrói o aplicativo e o inicia para você. Pode ser usado se você não tiver uma GUI.
export TORCHCHAT_ROOT=$(pwd)
sh torchchat/utils/scripts/android_example.sh
Nota: esse recurso ainda é um trabalho em andamento e nem todos os recursos estão funcionando
Usa a biblioteca LM_Eval para avaliar a precisão do modelo em uma variedade de tarefas. Padrões para o Wikitext e podem ser controlados manualmente usando as tarefas e limitar o ARGS. Veja avaliação
Exemplos
Modo ansioso:
python3 torchchat.py eval llama3.1 --dtype fp32 --limit 5
Para testar a perplexidade para um modelo abaixado ou quantizado, passe -o da mesma maneira que você faria para gerar:
python3 torchchat.py eval llama3.1 --pte-path llama3.1.pte --limit 5
Torchchat incorpora os detalhes da filosofia de design de Pytorch, especialmente "usabilidade sobre todo o resto".
Torchchat é uma biblioteca nativa-pytorch. Enquanto fornecemos integrações com o ecossistema circundante (por exemplo: modelos de rosto de abraço, etc.), toda a funcionalidade principal é escrita em Pytorch.
O Torchchat foi projetado para ser fácil de entender, usar e estender.
O Torchchat fornece componentes bem testados com uma barra de alta barridade. Nós fornecemos
Nós realmente valorizamos nossa comunidade e as contribuições feitas por nossos maravilhosos usuários. Usaremos esta seção para chamar algumas dessas contribuições! Se você deseja ajudar também, consulte o guia contribuinte.
Para se conectar conosco e outros membros da comunidade, convidamos você a se juntar à nossa comunidade Slack, preenchendo este formulário. Depois de se juntar, você pode:
#torchchat-general para perguntas gerais, discussão e apoio da comunidade.#torchchat-contributors se estiver interessado em contribuir diretamente para o desenvolvimento do projeto.Estou ansioso para discutir com você sobre o futuro do Torchchat!
Uma seção de erros/exceções de configuração comumente encontrados. Se esta seção não contiver sua situação, verifique os problemas do github
O acesso ao modelo é restrito e você não está na lista autorizada
Alguns modelos requerem uma etapa adicional para acessar. Siga o link fornecido no erro para obter acesso.
Falha na roda de construção
Se ./torchchat/utils/scripts/install_et.sh falhar com um erro como Building wheel for executorch (pyproject.toml) did not run successfully é possível que ele esteja ligando para uma versão mais antiga do Pytorch instalada de outra maneira, como via homebraw. Você pode quebrar o link desinstalando outras versões, como brew uninstall pytorch Nota: você pode quebrar algo que depende disso, então esteja ciente.
Certificado_verify_failed
Run pip install --upgrade certifi .
Se você encontrar bugs ou dificuldade em usar o Torchchat, registre um problema do GitHub.
Inclua o comando exato que você executou e a saída desse comando. Além disso, execute este script e inclua a saída salva para system_info.txt para que possamos depurar melhor seu 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
O conteúdo do repositório do Torchchat é fornecido sem garantias sobre desempenho ou compatibilidade. Em particular, o Torchchat disponibiliza arquiteturas de modelo escritas em Python para Pytorch, que podem não ser executadas da mesma maneira ou atendem aos mesmos padrões que as versões originais desses modelos. Ao usar o conteúdo do repositório do Torchchat, incluindo quaisquer arquiteturas de modelo, você é o único responsável por determinar a adequação de usar ou redistribuir o conteúdo do repositório do Torchchat e assumir quaisquer riscos associados ao uso das Torchchat Repository Content ou quaisquer modelos, saídas ou resultados, isoladamente e em combinação com outras tecnologias. Além disso, você pode ter outras obrigações legais que governam o uso de outros conteúdos, como os termos de serviço para modelos de terceiros, pesos, dados ou outras tecnologias, e você é o único responsável por cumprir todas essas obrigações.
Obrigado à comunidade por todas as bibliotecas e ferramentas incríveis que você construiu em torno da inferência local do LLM.
Georgi Gerganov e seu projeto GGML destacando a capacitação baseada na comunidade e inspirando tantos outros projetos.
Andrej Karpathy e seu projeto LLAMA2.C. Tantas idéias excelentes (e simples!) Em llama2.C que adotamos diretamente (idéias e código) de seu repositório. Você nunca pode dar errado seguindo o trabalho de Andrej.
Michael Gschwind, Bert Maher, Scott Wolchok, Bin Bao, Chen Yang, Huamin Li e Mu-Chu Li que construíram a primeira versão do Nanogpt ( DSOGPT ) com indutor de AOT, provando que a AOTI pode ser usado para construir LLMs eficientes e DSOs é um formato de distribuição viável para modelos para distribuição. nanogpt.
Bert Maher e sua llama2.so, que construíram no llama2 de Andrej e no DSOGPT para fechar o loop nos modelos de llama com atindutor.
Christian Puhrsch, Horace He, Joe Isaacson e muito mais por suas muitas contribuições para acelerar os modelos Genai no "qualquer coisa, rápido!" Pytorch.org blogs e, em particular, Horace ele para GPT, Fast!, que adotamos diretamente (tanto as idéias quanto o código) de seu repositório.
Torchchat é liberado sob a licença BSD 3. (O código adicional nesta distribuição é coberto pelas licenças de código aberto do MIT e Apache.) No entanto, você pode ter outras obrigações legais que governam o uso do conteúdo, como os termos de serviço para modelos de terceiros.