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開源許可涵蓋。)但是,您可能有其他法律義務來控制您對內容的使用,例如第三方模型的服務條款。