Torchchatは、大きな言語モデル(LLMS)をシームレスに実行する機能を示す小さなコードベースです。 Torchchatを使用すると、Pythonを使用してLLMを実行できます。独自の(C/C ++)アプリケーション(デスクトップまたはサーバー)およびiOSおよびAndroidで。
重要
更新2024年9月25日:Torchchatにはllama3.2 11bのマルチモーダルサポートがあります!!
試してみるには、以下のインストールセクションを完了してから、マルチモーダルガイドに乗り、詳細をご覧ください。
次のモデルはTorchchatによってサポートされており、関連するエイリアスを持っています。
| モデル | モバイルフレンドリー | メモ |
|---|---|---|
| メタラマ/メタラマ-3.2-3B-instruct | ✅ | chatに合わせて調整。 llama3.2-3bのエイリアス。 |
| メタラマ/メタラマ-3.2-3b | ✅ | generateに最適です。 llama3.2-3b-baseのエイリアス。 |
| メタラマ/llama-guard-3-1b | ✅ | 分類のために調整。 llama3-1b-guardのエイリアス。 |
| メタラマ/メタラマ-3.2-1b-instruct | ✅ | chatに合わせて調整。 llama3.2-1bのエイリアス。 |
| メタラマ/メタラマ-3.2-1B | ✅ | generateに最適です。 llama3.2-1b-baseのエイリアス。 |
| メタラマ/llama-3.2-11b-vision-instruct | マルチモーダル(画像 +テキスト)。 chatに合わせて調整。 llama3.2-11Bのエイリアス。 | |
| メタラマ/llama-3.2-11b-vision | マルチモーダル(画像 +テキスト)。 generate用に調整。 llama3.2-11B-baseのエイリアス。 | |
| メタラマ/メタラマ-3.1-8b-instruct | ✅ | chatに合わせて調整。 llama3.1へのエイリアス。 |
| メタラマ/メタラマ-3.1-8b | ✅ | generateに最適です。 llama3.1-baseのエイリアス。 |
| メタラマ/メタラマ-3-8b-instruct | ✅ | chatに合わせて調整。 llama3へのエイリアス。 |
| メタラマ/メタラマ-3-8b | ✅ | generateに最適です。 llama3-baseへのエイリアス。 |
| メタラマ/llama-2-7b-chat-hf | ✅ | chatに合わせて調整。 llama2へのエイリアス。 |
| メタラマ/llama-2-13b-chat-hf | chatに合わせて調整。 llama2-13b-chatのエイリアス。 | |
| メタラマ/llama-2-70b-chat-hf | chatに合わせて調整。 llama2-70b-chatのエイリアス。 | |
| メタラマ/llama-2-7b-hf | ✅ | generateに最適です。 llama2-baseへのエイリアス。 |
| メタラマ/コデラマ-7b-python-hf | ✅ | Pythonを調整してgenerate 。 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/stories15m | ✅ | generateのおもちゃモデル。 stories15Mのエイリアス。 |
| tinyllamas/stories42m | ✅ | generateのおもちゃモデル。 stories42Mのエイリアス。 |
| tinyllamas/stories110m | ✅ | 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コマンドは - ヘルプメニューで列挙できますが、後者はそれぞれのセクションで検討されています。
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れているように、hugging hugging faceユーザーアクセストークンを作成します。
抱きしめる顔にログインします:
huggingface-cli login
利用可能なモデルをご覧ください。
python3 torchchat.py list次に、テスト用にダウンロードします(このREADMEは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つの端末が必要です。1つはサーバーをホストするもの、もう1つはリクエストを送信する必要があります。 1つの端末で、サーバーを起動します
python3 torchchat.py server llama3.1シェルデフォルト:python3 torchchat.pyサーバーllama3.1&server_pid = $! ;スリープ90#サーバーがリクエストを受け入れる準備ができているのを待ちます
別の端末では、 curlを使用してサーバーをクエリします。モデルの構成に応じて、このクエリは応答に数分かかる場合があります。
注記
この機能はアクティブな開発中であるため、すべてのパラメーターが消費されるわけではありません。リクエストパラメーターが実装される詳細については、API/API.pyを参照してください。問題が発生した場合は、トラッキングGitHubの問題についてコメントしてください。
リクエストでstreamを「真」に設定すると、チャンクの応答が発生します。 streamが設定されていないか、「真」ではない場合、クライアントはサーバーからの完全な応答を待ちます。
サンプル入力 +出力
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} kill
このコマンドは、ローカルサーバーを照会することにより、ローカルチャット用の基本的なブラウザインターフェイスを開きます。
まず、上のサーバーセクションの手順に従って、ローカルサーバーを起動します。次に、別の端末で、インターフェイスを起動します。以下を実行すると、ブラウザにタブが開きます。
streamlit run torchchat/usages/browser.py
「最大応答トークン」スライダーを使用して、各応答のモデルによって生成されるトークンの最大数を制限します。 [チャットのリセット]ボタンをクリックしてメッセージ履歴を削除し、新しいチャットを開始します。
AOTIは、実行前にモデルをコンパイルして、より速い推論を実現します。このプロセスは、AOTinductorによって生成されたすべてのアーティファクトを含むZipped PT2ファイルと、実行可能なコンテンツを含む.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環境で実行するには、以前のようにGenerate Subcommandを使用しますが、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を必要とするTorchchatでコマンドを実行する前に、最初にExecutorchをインストールする必要があります。
executorchをインストールするには、次のコマンドを実行します。これにより、Executorch Repoを./et-build/srcにダウンロードし、さまざまなExecutorchライブラリを./et-build/installにインストールします。
重要
次のコマンドは、Torchchatルートディレクトリから実行する必要があります。
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モデルをテストするのに便利です。
具体的には、純粋なパイソンとランナー経由の2つの方法があります。
# 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 )およびトークネイザー( .model )ファイルをillamaフォルダーにコピーします。現在のtorchchatディレクトリでllama3.1.pteというモデルファイルと$(python3 torchchat.py where llama3.1)/tokenizer.modelパス
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パス
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トークネザーがあります。カスタムトークン剤とランタイムを調整または使用するには、executorchコードを変更し、このスクリプトを使用してAARライブラリを構築します。
または、Java、Android SDK Manager、Android SDK、Androidエミュレーター(物理デバイスが見つからない場合)を設定するtorchchat/utils/scripts/android_example.shを実行して、アプリを構築して起動することができます。 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で記述されています。
Torchchatは、理解し、使用し、拡張できるように設計されています。
Torchchatは、正確さに関する高水準を備えた、よくテストされたコンポーネントを提供します。私たちは提供します
私たちは、私たちのコミュニティと素晴らしいユーザーによる貢献を本当に大切にしています。このセクションを使用して、これらの貢献のいくつかを呼び出します!あなたも助けたい場合は、寄稿ガイドをご覧ください。
当社や他のコミュニティメンバーとつながるために、このフォームに記入して、Slackコミュニティに参加することをお勧めします。参加したら、次のことができます。
#torchchat-generalチャンネルにアクセスしてください。#torchchat-contributorsチャンネルに参加してください。Torchchat Futureについてあなたと話し合うのを楽しみにしています!
一般的に遭遇するセットアップエラー/例外のセクション。このセクションに状況が含まれていない場合は、githubの問題を確認してください
モデルへのアクセスは制限されており、あなたは承認されたリストにありません
一部のモデルでは、アクセスするための追加のステップが必要です。エラーで提供されているリンクに従ってアクセスします。
ビルディングホイールに失敗しました
./torchchat/utils/scripts/install_et.shがBuilding wheel for executorch (pyproject.toml) did not run successfullyと、Homebrewを介して他の方法でインストールされている可能性があります。 brew uninstall pytorchなど、他のバージョンをアンインストールすることでリンクを破ることができます注:これに依存するものを壊すことができるので、注意してください。
certificate_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はPythonのPytorchのために書かれたモデルアーキテクチャを使用して、同じ方法で実行したり、これらのモデルの元のバージョンと同じ基準を満たしていない可能性があります。モデルアーキテクチャを含むTorchchatリポジトリコンテンツを使用する場合、Torchchatリポジトリコンテンツの使用または再配布の適切性を判断する責任があり、Torchchatリポジトリコンテンツまたはモデル、出力、または結果の両方に関連するリスクを想定しています。さらに、サードパーティモデル、重み、データ、またはその他のテクノロジーのサービス条件など、他のコンテンツの使用を支配する他の法的義務があり、そのような義務をすべて遵守する責任があります。
ローカルLLM推論を中心に構築したすべての素晴らしいライブラリとツールについて、コミュニティに感謝します。
Georgi Gerganovと彼のGGMLプロジェクトは、コミュニティベースのイネーブルメントと他の多くのプロジェクトを刺激することにスポットライトを当てています。
Andrej Karpathyと彼のllama2.cプロジェクト。 llama2.cの非常に多くの素晴らしい(そしてシンプルな!)アイデアは、彼のリポジトリから直接(アイデアとコードの両方)を採用しました。 Andrejの仕事をフォローしても間違いなくなることはありません。
Michael Gschwind、Bert Maher、Scott Wolchok、Bin Bao、Chen Yang、Huamin Li、Mu-Chu Liは、AOTIを使用してAOTインダクタを使用してNanogpt( DSOGPT )を構築し、AOTIを使用して効率的なLLMSを構築できることを証明し、DSOはモデルに有効な分布形式です。 nanogpt。
Bert Maherと彼のllama2.soは、Andrejのllama2.cおよびdsogptに構築され、aotinductorを使用してllamaモデルのループを閉じます。
Christian Puhrsch、Horace He、Joe Isaacsonなど、「何でも、速い!」 pytorch.orgのブログ、そして特に、HoraceはGpt、Fast!のために彼のために、彼のリポジトリから直接(アイデアとコードの両方)を採用しました。
TorchchatはBSD 3ライセンスの下でリリースされます。 (この分布の追加コードは、MITおよびApacheのオープンソースライセンスでカバーされています。)ただし、サードパーティモデルのサービス条件など、コンテンツの使用を管理する他の法的義務がある場合があります。