Torchchat是一个小型代码库,展示了能够无缝运行大型语言模型(LLMS)的能力。使用Torchchat,您可以在自己的(C/C ++)应用程序(桌面或服务器)以及iOS和Android上使用Python运行LLMS。
重要的
2024年9月25日更新:Torchchat对Llama3.2 11B有多模式支持!
要尝试一下,请完成下面的安装部分,然后跳到我们的多模式指南以了解更多信息。
以下模型由Torchchat支持并具有相关的别名。
| 模型 | 移动友好 | 笔记 |
|---|---|---|
| meta-llama/meta-llama-3.2-3b-instruct | ✅ | 调整chat 。与llama3.2-3b的别名。 |
| meta-llama/meta-llama-3.2-3b | ✅ | 最适合generate 。与llama3.2-3b-base别名。 |
| meta-llama/llama-guard-3-1b | ✅ | 调整以进行分类。与llama3-1b-guard别名。 |
| meta-llama/meta-llama-3.2-1b-instruct | ✅ | 调整chat 。别名与llama3.2-1b 。 |
| meta-llama/meta-llama-3.2-1b | ✅ | 最适合generate 。与llama3.2-1b-base别名。 |
| meta-llama/Llama-3.2-11b-Vision-Instruct | 多模式(图像 +文本)。调整chat 。别名与llama3.2-11B 。 | |
| meta-llama/llama-3.2-11b-vision | 多模式(图像 +文本)。调整为generate 。与llama3.2-11B-base别名。 | |
| meta-llama/meta-llama-3.1-8b-Instruct | ✅ | 调整chat 。别名与llama3.1 。 |
| meta-llama/meta-llama-3.1-8b | ✅ | 最适合generate 。与llama3.1-base别名。 |
| meta-llama/meta-llama-3-8b-instruct | ✅ | 调整chat 。别名与llama3 。 |
| meta-llama/meta-llama-3-8b | ✅ | 最适合generate 。与llama3-base别名。 |
| meta-llama/llama-2-7b-chat-hf | ✅ | 调整chat 。别名与llama2 。 |
| meta-llama/llama-2-13b-chat-hf | 调整chat 。与llama2-13b-chat别名。 | |
| meta-llama/llama-2-70b-chat-hf | 调整chat 。与llama2-70b-chat别名。 | |
| meta-llama/llama-2-7b-hf | ✅ | 最适合generate 。与llama2-base别名。 |
| meta-llama/codellama-7b-python-hf | ✅ | 调整为Python并generate 。与codellama的别名。 |
| meta-llama/codellama-34b-python-hf | ✅ | 调整为Python并generate 。与codellama-34b别名。 |
| Mistralai/Mistral-7b-v0.1 | ✅ | 最适合generate 。与mistral-7b-v01-base的别名。 |
| MISTRALAI/MISTRAL-7B-INSTRUCT-V0.1 | ✅ | 调整chat 。与mistral-7b-v01-instruct的别名。 |
| MISTRALAI/MISTRAL-7B-INSTRUCT-V0.2 | ✅ | 调整chat 。别名与mistral 。 |
| Tinyllamas/Stories 15m | ✅ | generate玩具模型。别名stories15M 。 |
| Tinyllamas/Stories42M | ✅ | generate玩具模型。别名与stories42M 。 |
| Tinyllamas/Stories11110m | ✅ | generate玩具模型。别名对stories110M 。 |
| OpenLM-Research/Open_llama_7b | ✅ | 最适合generate 。别名与open-llama 。 |
以下步骤要求您安装了Python 3.10。
提示
Torchchat使用了各种Pytorch项目的最新更改,因此强烈建议您使用VENV(通过下面的命令)或Conda。
git clone https://github.com/pytorch/torchchat.git
cd torchchat
python3 -m venv .venv
source .venv/bin/activate
./install/install_requirements.shTorchchat的界面通过Python命令和本地跑步者利用。当python命令在 - -Help菜单中枚举时,后者在各自的部分中进行了探索。
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 exitPython推断(聊天,生成,浏览器,服务器)
出口(出口)
库存管理(下载,列表,删除,哪里)
评估(评估)
大多数模型都使用拥抱面作为分销渠道,因此您需要创建一个拥抱的面部帐户。在此处记录,创建一个带有write角色的拥抱脸式用户访问令牌。
登录到拥抱的脸:
huggingface-cli login
看看可用的型号:
python3 torchchat.py list然后下载一个用于测试(此读数使用Llama3.1)
python3 torchchat.py download llama3.1
笔记
如果您尚未访问,此命令可能会提示您通过拥抱脸请求访问Llama 3。只需遵循提示并在授予访问时重新运行命令即可。**
此子命令显示了特定模型的位置。
python3 torchchat.py where llama3.1当您不想使用硬码路径时,这在脚本中很有用
此子命令删除了指定的模型
python3 torchchat.py remove llama3.1有关这些命令的更多信息,可以通过添加--help选项找到。
在Pytorch中运行模型的最简单方法是通过急切的执行。这是Pytorch和Torchchat的默认执行模式。它执行推理而不创建出口工件或使用单独的跑步者。
用于推理的模型也可以根据特定需求(汇编,量化等)进行配置和量身定制。有关Torchchat支持的选项,请参见“自定义指南”。
提示
有关这些命令的更多信息,请参阅--help菜单。
这种模式使您可以以互动方式与LLM聊天。
python3 torchchat.py chat llama3.1此模式根据输入提示生成文本。
python3 torchchat.py generate llama3.1 --prompt " write me a story about a boy and his bear "此模式公开了用于与模型交互的REST API。服务器遵循OpenAI API规范进行聊天完成。
要测试REST API,您将需要2个终端:一个可以托管服务器,另一个用于发送请求。在一个终端中,启动服务器
python3 torchchat.py server llama3.1shell默认值:Python3 Torchchat.py Server Llama3.1&Server_pid = $! ;睡眠90#等待服务器准备好接受请求
在另一个终端中,使用curl查询服务器。根据模型配置,此查询可能需要几分钟才能响应。
笔记
由于此功能正在积极开发,因此并非每个参数都被消耗。有关实现的请求参数的详细信息,请参见API/API.PY。如果遇到任何问题,请对跟踪GitHub问题发表评论。
在请求中将stream设置为“ true”,将在块中发出响应。如果stream尚不设置“ true”,则客户端将等待服务器的完整响应。
示例输入 +输出
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"}
外壳默认值:杀死$ {server_pid}
此命令通过查询本地服务器打开了一个基本的浏览器接口,以供本地聊天。
首先,按照上面的服务器部分中的步骤启动本地服务器。然后,在另一个终端中启动接口。运行以下内容将在您的浏览器中打开一个选项卡。
streamlit run torchchat/usages/browser.py
使用“最大响应令牌”滑块限制模型为每个响应生成的最大令牌。单击“重置聊天”按钮以删除消息历史记录并开始新的聊天。
AOTI在执行之前对模型进行编译,以更快地推断。该过程创建一个zipped pt2文件,其中包含由Aotainductor生成的所有工件,以及带有可运行内容的.So文件,然后加载该文件以进行推理。这可以使用Python和C ++的环境来完成。
以下示例导出并执行Llama3.1 8B指令模型。第一个命令编译并执行实际导出。
python3 torchchat.py export llama3.1 --output-aoti-package-path exportedModels/llama3_1_artifacts.pt2笔记
如果您的机器有CUDA添加此标志以进行性能 - 导出时--quantize torchchat/quant_config/cuda.json 。
有关量化的更多详细信息以及用于您的用例的设置,请访问我们的自定义指南。
要在Python Enviroment中运行,请像以前一样使用生成子命令,但包括PT2文件。
python3 torchchat.py generate llama3.1 --aoti-package-path exportedModels/llama3_1_artifacts.pt2 --prompt " Hello my name is "要在C ++环境中运行,我们需要构建跑步者二进制文件。
torchchat/utils/scripts/build_native.sh aoti然后使用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 " Executorch使您可以优化模型在移动设备或嵌入式设备上执行。
在运行需要executorch的任何命令之前,您必须首先安装executorch。
要安装executorch,请运行以下命令。这将下载executorch存储库中。
重要的
以下命令应从torchchat root目录运行。
export TORCHCHAT_ROOT=${PWD}
./torchchat/utils/scripts/install_et.sh
与AOTI类似,要部署到设备上,我们首先导出PTE工件,然后加载工件进行推理。
以下示例使用Llama3.1 8B指示模型。
# Export
python3 torchchat.py export llama3.1 --quantize torchchat/quant_config/mobile.json --output-pte-path llama3.1.pte
笔记
我们使用--quantize torchchat/quant_config/mobile.json来量化Llama3.1模型,以降低模型尺寸并提高设备用例的性能。
有关量化的更多详细信息以及用于您的用例的设置,请访问我们的自定义指南。
尽管Executorch不专注于桌面推断,但它可以这样做。这很方便地测试PTE模型而无需将其发送到物理设备。
具体来说,有两种方法:纯Python和通过跑步者
# Execute
python3 torchchat.py generate llama3.1 --pte-path llama3.1.pte --prompt "Hello my name is"
建立跑步者
torchchat/utils/scripts/build_native.sh et使用跑步者执行
cmake-out/et_run llama3.1.pte -z ` python3 torchchat.py where llama3.1 ` /tokenizer.model -l 3 -i " Once upon a time "以下假设您已经完成了设置executorch的步骤。
.dmg安装程序,然后将CMAKE应用程序移至/Applications文件夹。sudo /Applications/CMake.app/Contents/bin/cmake-gui --installincreased-memory-limit权的开发供应概况。 打开XCode项目:
open et-build/src/executorch/examples/demo-apps/apple_ios/LLaMA/LLaMA.xcodeproj注意:如果您遇到了与包装依赖关系有关的任何问题,请关闭XCode,清洁一些缓存和/或构建产品,然后再次打开Xcode项目:
rm -rf ~ /Library/org.swift.swiftpm ~ /Library/Caches/org.swift.swiftpm ~ /Library/Caches/com.apple.dt.Xcode ~ /Library/Developer/Xcode/DerivedData
单击“播放”按钮以在模拟器中启动该应用程序。
要在设备上运行,请确保将其设置为开发,并具有increased-memory-limit权利的配置配置文件。更新应用程序的捆绑包标识符,以将您的供应配置文件与所需功能匹配。
成功启动该应用程序后,将导出的executorch模型( .pte )和Tokenizer( .model )文件复制到Illama文件夹。您可以在当前的torchchat目录中找到称为llama3.1.pte的模型文件,并在$(python3 torchchat.py where llama3.1)/tokenizer.model Path中找到tokenizer文件。
On My iPhone > iLLaMA 。遵循该应用程序的UI指南从本地文件系统中选择模型和令牌文件并发出提示。
单击下面的图像以查看行动!
以下假设您已经完成了设置executorch的步骤。
下载包含Java库和对应的JNI库的AAR文件以构建和运行该应用程序。
将下载的AAR文件移至torchchat/edge/android/torchchat/app/libs/ 。您可能需要创建目录torchchat/edge/android/torchchat/app/libs/如果不存在。
将模型和令牌文件推向您的设备。您可以在当前的torchchat目录中找到称为llama3.1.pte的模型文件,并在$(python3 torchchat.py where llama3.1)/tokenizer.model Path中找到tokenizer文件。
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
使用Android Studio打开位于torchchat/edge/android/torchchat Torchchat App Skeleton。
单击“播放”按钮(^r)将其启动到仿真器/设备。
遵循应用程序的UI指南,从本地文件系统中选择模型和令牌文件。然后发出提示。
注意:步骤1中列出的AAR文件具有Tiktoken和SentensePiece Tokenizer。要调整或使用自定义令牌和运行时,请修改Executorch代码,然后使用此脚本来构建AAR库。
另外,您可以运行torchchat/utils/scripts/android_example.sh设置Java,Android SDK Manager,Android SDK,Android Emulator(如果找不到物理设备),构建应用程序,并为您启动它。如果您没有GUI,可以使用它。
export TORCHCHAT_ROOT=$(pwd)
sh torchchat/utils/scripts/android_example.sh
注意:此功能仍在进行中,并非所有功能都在工作
使用LM_EVAL库评估各种任务的模型精度。默认为Wikitext,可以使用任务手动控制并限制ARGS。请参阅评估
例子
急切的模式:
python3 torchchat.py eval llama3.1 --dtype fp32 --limit 5
要测试降低或量化模型的困惑,请以相同的方式传递它:
python3 torchchat.py eval llama3.1 --pte-path llama3.1.pte --limit 5
Torchchat体现了Pytorch的设计理念细节,尤其是“对其他所有事物的可用性”。
Torchchat是一个本地的Pytorch库。当我们提供与周围生态系统(例如:拥抱面部模型等)的集成时,所有核心功能均以Pytorch编写。
Torchchat旨在易于理解,使用和扩展。
Torchchat提供了经过良好测试的组件,并具有正确的正确性。我们提供
我们确实重视我们的社区以及出色的用户所做的贡献。我们将使用本节来召集其中一些贡献!如果您也想提供帮助,请参阅《贡献指南》。
要与我们和其他社区成员建立联系,我们邀请您通过填写此表格来加入我们的Slack社区。加入后,您可以:
#torchchat-general Channel进行一般问题,讨论和社区支持。#torchchat-contributors频道。期待与您讨论Torchchat的未来!
一部分遇到的设置错误/异常。如果本节不包含您的情况,请检查GitHub问题
访问模型是受限制的,您不在授权列表中
一些型号需要额外的步骤才能访问。请按照错误中提供的链接获取访问。
失败的建筑轮
如果./torchchat/utils/scripts/install_et.sh失败,则Building wheel for executorch (pyproject.toml) did not run successfully类的错误,它可能会链接到Pytorch旧版本的Pytorch安装的其他方式,例如通过Homebrew等其他方式。您可以通过卸载其他版本(例如brew uninstall pytorch注意:您可能会破坏取决于此的内容)来打破链接,因此请注意。
证书_verify_failed
运行pip install --upgrade certifi 。
如果您遇到错误或使用Torchchat困难,请提交GitHub问题。
请包括您运行的确切命令和该命令的输出。另外,运行此脚本并将保存到system_info.txt输出包含,以便我们可以更好地调试您的问题。
(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
提供了Torchchat存储库内容,而无需保证性能或兼容性。尤其是,Torchchat使Pytorch用Python编写的模型体系结构可能不会以相同的方式执行或符合与这些模型的原始版本相同的标准。当使用Torchchat存储库内容(包括任何型号架构)时,您将全权负责确定使用或重新分布Torchchat Reposority内容的适当性,并承担与使用Torchchat Reposority内容或任何模型,单独或单独和与任何其他技术结合使用的任何风险。此外,您可能有其他法律义务来控制您对其他内容的使用,例如第三方模型,权重,数据或其他技术的服务条款,并且您完全负责遵守所有这些义务。
感谢社区围绕本地LLM推理构建的所有令人敬畏的图书馆和工具。
Georgi Gerganov及其GGML项目引起了人们对基于社区的启示的关注,并激发了许多其他项目。
Andrej Karpathy和他的Llama2.C项目。我们在他的存储库中直接采用了Llama2.c中的许多伟大(和简单!)的想法。跟随安德烈的工作永远不会出错。
Michael Gschwind,Bert Maher,Scott Wolchok,Bin Bao,Chen Yang,Huamin Li和Mu-Chu Li,他们构建了具有AOT电感器的第一个版本的Nanogpt( DSOGPT ),证明可以使用AOTI来构建有效的LLMS,并且DSOS是模型的可用分发格式。 Nanogpt。
Bert Maher和他的Llama2.So,建于Andrej的Llama2.c和Dsogpt上,将Llama模型上的环路与Aotinductor关闭。
克里斯蒂安·帕尔希(Christian Puhrsch),霍拉斯(Horace He),乔·艾萨克森(Joe Isaacson)以及许多人在加速吉奈(Genai)模型中的众多贡献“一切,快!” pytorch.org博客,尤其是horace he for gpt,fast!,我们从他的存储库中直接采用了(想法和代码)。
Torchchat以BSD 3许可发布。 (此分布中的其他代码由麻省理工学院和Apache开源许可涵盖。)但是,您可能有其他法律义务来控制您对内容的使用,例如第三方模型的服务条款。