Torchchat adalah basis kode kecil yang menampilkan kemampuan untuk menjalankan model bahasa besar (LLM) dengan mulus. Dengan Torchchat, Anda dapat menjalankan LLMS menggunakan Python, dalam aplikasi Anda sendiri (C/C ++) (desktop atau server) dan di iOS dan Android.
Penting
UPDATE 25 September 2024: Torchchat memiliki dukungan multimodal untuk llama3.2 11b !!
Untuk mencobanya, selesaikan bagian instalasi di bawah ini, lalu naik ke panduan multimodal kami untuk mempelajari lebih lanjut.
Model -model berikut didukung oleh Torchchat dan memiliki alias terkait.
| Model | Ramah seluler | Catatan |
|---|---|---|
| meta-llama/meta-llama-3.2-3b-instruct | ✅ | Disetel untuk chat . Alias ke llama3.2-3b . |
| Meta-llama/meta-llama-3.2-3b | ✅ | Terbaik untuk generate . Alias ke llama3.2-3b-base . |
| Meta-llama/llama-guard-3-1b | ✅ | Disetel untuk klasifikasi. Alias ke llama3-1b-guard . |
| meta-llama/meta-llama-3.2-1b-instruct | ✅ | Disetel untuk chat . Alias ke llama3.2-1b . |
| meta-llama/meta-llama-3.2-1b | ✅ | Terbaik untuk generate . Alias ke llama3.2-1b-base . |
| meta-llama/llama-3.2-11b-vision-instruct | Multimodal (gambar + teks). Disetel untuk chat . Alias ke llama3.2-11B . | |
| meta-llama/llama-3.2-11b-vision | Multimodal (gambar + teks). Disetel untuk generate . Alias ke llama3.2-11B-base . | |
| meta-llama/meta-llama-3.1-8b-instruct | ✅ | Disetel untuk chat . Alias ke llama3.1 . |
| meta-llama/meta-llama-3.1-8b | ✅ | Terbaik untuk generate . Alias ke llama3.1-base . |
| meta-llama/meta-llama-3-8b-instruct | ✅ | Disetel untuk chat . Alias ke llama3 . |
| Meta-llama/meta-llama-3-8b | ✅ | Terbaik untuk generate . Alias ke llama3-base . |
| META-LLAMA/LLAMA-2-7B-CHAT-HF | ✅ | Disetel untuk chat . Alias ke llama2 . |
| meta-llama/llama-2-13b-chat-hf | Disetel untuk chat . Alias ke llama2-13b-chat . | |
| META-LLAMA/LLAMA-2-70B-CHAT-HF | Disetel untuk chat . Alias ke llama2-70b-chat . | |
| Meta-llama/llama-2-7b-hf | ✅ | Terbaik untuk generate . Alias ke llama2-base . |
| Meta-llama/codellama-7b-python-hf | ✅ | Disetel untuk python dan generate . Alias ke codellama . |
| Meta-llama/codellama-34b-python-hf | ✅ | Disetel untuk python dan generate . Alias ke codellama-34b . |
| MISTRALAI/MISTRAL-7B-V0.1 | ✅ | Terbaik untuk generate . Alias ke mistral-7b-v01-base . |
| MISTRALAI/MISTRAL-7B-INSTRUCT-V0.1 | ✅ | Disetel untuk chat . Alias untuk mistral-7b-v01-instruct . |
| MISTRALAI/MISTRAL-7B-INSTRUCT-V0.2 | ✅ | Disetel untuk chat . Alias ke mistral . |
| Tinyllamas/Stories15m | ✅ | Model mainan untuk generate . Alias ke stories15M . |
| Tinyllamas/Stories42m | ✅ | Model mainan untuk generate . Alias ke stories42M . |
| Tinyllamas/Stories110m | ✅ | Model mainan untuk generate . Alias ke stories110M . |
| OpenLM-Research/open_llama_7b | ✅ | Terbaik untuk generate . Alias ke open-llama . |
Langkah -langkah berikut mengharuskan Anda menginstal Python 3.10.
Tip
Torchchat menggunakan perubahan terbaru dari berbagai proyek Pytorch sehingga sangat disarankan agar Anda menggunakan VENV (dengan menggunakan perintah di bawah) atau Conda.
git clone https://github.com/pytorch/torchchat.git
cd torchchat
python3 -m venv .venv
source .venv/bin/activate
./install/install_requirements.shAntarmuka Torchchat dimanfaatkan melalui perintah Python dan pelari asli . Sementara perintah Python dapat dihitung di menu --help, yang terakhir dieksplorasi di bagian masing -masing.
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 Inference (Chat, Generate, Browser, Server)
Ekspor (ekspor)
Manajemen inventaris (unduh, daftar, hapus, di mana)
Evaluasi (Eval)
Sebagian besar model menggunakan wajah pelukan sebagai saluran distribusi, jadi Anda perlu membuat akun wajah pemeluk. Buat token akses pengguna yang memeluk seperti yang didokumentasikan di sini dengan peran write .
Masuk ke wajah memeluk:
huggingface-cli login
Lihatlah model yang tersedia:
python3 torchchat.py listKemudian unduh satu untuk pengujian (readme ini menggunakan llama3.1)
python3 torchchat.py download llama3.1
Catatan
Perintah ini dapat meminta Anda untuk meminta akses ke Llama 3 melalui Face Memeluk, jika Anda belum memiliki akses. Cukup ikuti petunjuknya dan ikuti kembali perintah saat akses diberikan.*
Sub -perintah ini menunjukkan lokasi model tertentu.
python3 torchchat.py where llama3.1Ini berguna dalam skrip saat Anda tidak ingin jalur kode keras
Sub -perintah ini menghapus model yang ditentukan
python3 torchchat.py remove llama3.1 Informasi lebih lanjut tentang perintah ini dapat ditemukan dengan menambahkan opsi --help .
Cara paling sederhana untuk menjalankan model di Pytorch adalah melalui eksekusi yang bersemangat. Ini adalah mode eksekusi default untuk Pytorch dan Torchchat. Ini melakukan inferensi tanpa membuat mengekspor artefak atau menggunakan pelari terpisah.
Model yang digunakan untuk inferensi juga dapat dikonfigurasi dan disesuaikan dengan kebutuhan spesifik (kompilasi, kuantisasi, dll.). Lihat Panduan Kustomisasi untuk opsi yang didukung oleh Torchchat.
Tip
Untuk informasi lebih lanjut tentang perintah ini, silakan merujuk ke menu --help .
Mode ini memungkinkan Anda untuk mengobrol dengan LLM secara interaktif.
python3 torchchat.py chat llama3.1Mode ini menghasilkan teks berdasarkan prompt input.
python3 torchchat.py generate llama3.1 --prompt " write me a story about a boy and his bear "Mode ini memperlihatkan API REST untuk berinteraksi dengan model. Server mengikuti spesifikasi API OpenAI untuk penyelesaian obrolan.
Untuk menguji REST API, Anda akan membutuhkan 2 terminal : satu untuk meng -host server, dan satu untuk mengirim permintaan. Di satu terminal, mulailah server
python3 torchchat.py server llama3.1Shell Default: python3 torchchat.py server llama3.1 & server_pid = $! ; Tidur 90 # Tunggu server siap menerima permintaan
Di terminal lain, query server menggunakan curl . Bergantung pada konfigurasi model, kueri ini mungkin membutuhkan beberapa menit untuk merespons.
Catatan
Karena fitur ini sedang dalam pengembangan aktif, tidak setiap parameter dikonsumsi. Lihat API/API.py untuk perincian tentang parameter permintaan mana yang diimplementasikan. Jika Anda menghadapi masalah apa pun, silakan komentari masalah pelacakan GitHub.
Mengatur stream ke "true" dalam permintaan mengeluarkan tanggapan dalam potongan. Jika stream tidak disetel atau tidak "benar", maka klien akan menunggu respons penuh dari server.
Contoh Input + Output
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 Default: Bunuh $ {Server_Pid}
Perintah ini membuka antarmuka browser dasar untuk obrolan lokal dengan menanyakan server lokal.
Pertama, ikuti langkah -langkah di bagian server di atas untuk memulai server lokal. Kemudian, di terminal lain, luncurkan antarmuka. Menjalankan berikut ini akan membuka tab di browser Anda.
streamlit run torchchat/usages/browser.py
Gunakan slider "Max Response Token" untuk membatasi jumlah token maksimum yang dihasilkan oleh model untuk setiap respons. Klik tombol "Reset Obrolan" untuk menghapus riwayat pesan dan memulai obrolan baru.
Aoti mengkompilasi model sebelum dieksekusi untuk inferensi yang lebih cepat. Proses ini membuat file PT2 zip yang berisi semua artefak yang dihasilkan oleh aotinductor, dan file .so dengan konten runnable yang kemudian dimuat untuk inferensi. Ini dapat dilakukan dengan lingkungan Python dan C ++.
Contoh berikut mengekspor dan mengeksekusi model instruksi llama3.1 8b. Perintah pertama mengkompilasi dan melakukan ekspor yang sebenarnya.
python3 torchchat.py export llama3.1 --output-aoti-package-path exportedModels/llama3_1_artifacts.pt2Catatan
Jika mesin Anda memiliki CUDA, tambahkan bendera ini untuk kinerja --quantize torchchat/quant_config/cuda.json saat mengekspor.
Untuk detail lebih lanjut tentang kuantisasi dan pengaturan apa yang akan digunakan untuk kasus penggunaan Anda, kunjungi Panduan Kustomisasi kami.
Untuk menjalankan dalam lingkungan Python, gunakan sub -perintah menghasilkan seperti sebelumnya, tetapi sertakan file PT2.
python3 torchchat.py generate llama3.1 --aoti-package-path exportedModels/llama3_1_artifacts.pt2 --prompt " Hello my name is "Untuk menjalankan dalam lingkungan C ++, kita perlu membangun biner pelari.
torchchat/utils/scripts/build_native.sh aotiKemudian jalankan yang dapat dieksekusi yang dikompilasi, dengan 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 memungkinkan Anda untuk mengoptimalkan model Anda untuk dieksekusi pada perangkat seluler atau tertanam.
Sebelum menjalankan perintah apa pun di Torchchat yang membutuhkan Executorch, Anda harus terlebih dahulu menginstal Executorch.
Untuk menginstal Executorch, jalankan perintah berikut. Ini akan mengunduh repo Executorch ke ./et-build/src dan menginstal berbagai perpustakaan Executorch ke ./et-build/install.
Penting
Perintah berikut harus dijalankan dari direktori root Torchchat.
export TORCHCHAT_ROOT=${PWD}
./torchchat/utils/scripts/install_et.sh
Mirip dengan Aoti, untuk digunakan ke perangkat, pertama -tama kami mengekspor artefak PTE, kemudian kami memuat artefak untuk inferensi.
Contoh berikut menggunakan model instruksi LLAMA3.1 8B.
# Export
python3 torchchat.py export llama3.1 --quantize torchchat/quant_config/mobile.json --output-pte-path llama3.1.pte
Catatan
Kami menggunakan --quantize torchchat/quant_config/mobile.json untuk mengukur model LLAMA3.1 untuk mengurangi ukuran model dan meningkatkan kinerja untuk kasus penggunaan di perangkat.
Untuk detail lebih lanjut tentang kuantisasi dan pengaturan apa yang akan digunakan untuk kasus penggunaan Anda, kunjungi Panduan Kustomisasi kami.
Meskipun Executorch tidak fokus pada inferensi desktop, ia mampu melakukannya. Ini berguna untuk menguji model PTE tanpa mengirimkannya ke perangkat fisik.
Secara khusus, ada 2 cara untuk melakukannya: Python murni dan melalui pelari
# Execute
python3 torchchat.py generate llama3.1 --pte-path llama3.1.pte --prompt "Hello my name is"
Bangun pelari
torchchat/utils/scripts/build_native.sh etJalankan menggunakan runner
cmake-out/et_run llama3.1.pte -z ` python3 torchchat.py where llama3.1 ` /tokenizer.model -l 3 -i " Once upon a time "Berikut ini mengasumsikan Anda telah menyelesaikan langkah -langkah untuk menyiapkan Executorch.
.dmg dan pindahkan folder CMake App ke /Applications .sudo /Applications/CMake.app/Contents/bin/cmake-gui --installincreased-memory-limit . Buka Proyek Xcode:
open et-build/src/executorch/examples/demo-apps/apple_ios/LLaMA/LLaMA.xcodeprojCatatan: Jika Anda mengalami masalah apa pun yang terkait dengan dependensi paket, tutup Xcode, bersihkan beberapa cache dan/atau produk build, dan buka proyek XCode lagi:
rm -rf ~ /Library/org.swift.swiftpm ~ /Library/Caches/org.swift.swiftpm ~ /Library/Caches/com.apple.dt.Xcode ~ /Library/Developer/Xcode/DerivedData
Klik tombol Putar untuk meluncurkan aplikasi di simulator.
Untuk menjalankan pada perangkat, pastikan Anda mengaturnya untuk pengembangan dan profil penyediaan dengan increased-memory-limit . Perbarui pengidentifikasi bundel aplikasi agar sesuai dengan profil penyediaan Anda dengan kemampuan yang diperlukan.
Setelah berhasil meluncurkan aplikasi, salin file Execored Execororch ( .pte ) dan Tokenizer ( .model ) ke folder Illama. Anda dapat menemukan file model yang disebut llama3.1.pte di direktori torchchat saat ini dan file tokenizer di $(python3 torchchat.py where llama3.1)/tokenizer.model Path.
On My iPhone > iLLaMA .Ikuti pedoman UI aplikasi untuk memilih model dan file tokenizer dari sistem file lokal dan mengeluarkan prompt.
Klik gambar di bawah untuk melihatnya beraksi!
Berikut ini mengasumsikan Anda telah menyelesaikan langkah -langkah untuk menyiapkan Executorch.
Unduh file AAR, yang berisi Perpustakaan Java dan Perpustakaan JNI yang sesuai, untuk membangun dan menjalankan aplikasi.
Pindahkan file AAR yang diunduh ke torchchat/edge/android/torchchat/app/libs/ . Anda mungkin perlu membuat direktori torchchat/edge/android/torchchat/app/libs/ jika tidak ada.
Dorong file model dan tokenizer ke perangkat Anda. Anda dapat menemukan file model yang disebut llama3.1.pte di direktori torchchat saat ini dan file tokenizer di $(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
Gunakan Android Studio untuk membuka Torchchat App Skeleton, yang terletak di torchchat/edge/android/torchchat .
Klik tombol PLAY (^R) untuk meluncurkannya ke emulator/perangkat.
Ikuti pedoman UI aplikasi untuk memilih model dan file tokenizer dari sistem file lokal. Kemudian keluarkan prompt.
Catatan: File AAR yang tercantum pada Langkah 1 memiliki Toktoken dan Tokenizer Sentensepiece. Untuk mengubah atau menggunakan tokenizer dan runtime khusus, memodifikasi kode Executorch dan menggunakan skrip ini untuk membangun perpustakaan AAR.
Atau, Anda dapat menjalankan torchchat/utils/scripts/android_example.sh yang mengatur Java, Android SDK Manager, Android SDK, Android Emulator (jika tidak ada perangkat fisik yang ditemukan), membangun aplikasi, dan meluncurkannya untuk Anda. Ini dapat digunakan jika Anda tidak memiliki GUI.
export TORCHCHAT_ROOT=$(pwd)
sh torchchat/utils/scripts/android_example.sh
CATATAN: Fitur ini masih dalam proses dan tidak semua fitur berfungsi
Menggunakan pustaka LM_EVAL untuk mengevaluasi akurasi model pada berbagai tugas. Default ke wikuxt dan dapat dikontrol secara manual menggunakan tugas dan membatasi arg. Lihat Evaluasi
Contoh
Mode yang bersemangat:
python3 torchchat.py eval llama3.1 --dtype fp32 --limit 5
Untuk menguji kebingungan untuk model yang diturunkan atau dikuantisasi, lewati dengan cara yang sama seperti Anda akan menghasilkan:
python3 torchchat.py eval llama3.1 --pte-path llama3.1.pte --limit 5
Torchchat mewujudkan detail filosofi desain Pytorch, terutama "kegunaan atas segalanya".
Torchchat adalah perpustakaan asli-Pytorch. Sementara kami memberikan integrasi dengan ekosistem sekitarnya (misalnya: memeluk model wajah, dll), semua fungsi inti ditulis dalam pytorch.
Torchchat dirancang agar mudah dimengerti, digunakan, dan diperluas.
Torchchat menyediakan komponen yang telah teruji dengan baik dengan kebenaran batang tinggi. Kami menyediakan
Kami benar -benar menghargai komunitas kami dan kontribusi yang dibuat oleh pengguna kami yang luar biasa. Kami akan menggunakan bagian ini untuk memanggil beberapa kontribusi ini! Jika Anda ingin membantu juga, silakan lihat panduan yang berkontribusi.
Untuk terhubung dengan kami dan anggota komunitas lainnya, kami mengundang Anda untuk bergabung dengan komunitas Slack kami dengan mengisi formulir ini. Setelah Anda bergabung, Anda bisa:
#torchchat-general untuk pertanyaan umum, diskusi, dan dukungan masyarakat.#torchchat-contributors jika Anda tertarik untuk berkontribusi langsung pada pengembangan proyek.Berharap untuk berdiskusi dengan Anda tentang Future Torchchat!
Bagian dari kesalahan/pengecualian pengaturan yang biasa ditemui. Jika bagian ini tidak mengandung situasi Anda, periksa masalah GitHub
Akses ke model dibatasi dan Anda tidak ada dalam daftar resmi
Beberapa model memerlukan langkah tambahan untuk mengakses. Ikuti tautan yang disediakan dalam kesalahan untuk mendapatkan akses.
Roda bangunan yang gagal
Jika ./torchchat/utils/scripts/install_et.sh gagal dengan kesalahan seperti Building wheel for executorch (pyproject.toml) did not run successfully mungkin saja menghubungkan ke versi pytorch yang lebih lama dipasang dengan cara lain seperti melalui homebrew. Anda dapat memecahkan tautan dengan menghapus pemasangan versi lain seperti brew uninstall pytorch Note: Anda dapat memecahkan sesuatu yang tergantung pada ini, jadi waspadalah.
Certificate_verify_failed
Jalankan pip install --upgrade certifi .
Jika Anda menghadapi bug atau kesulitan menggunakan Torchchat, silakan ajukan masalah GitHub.
Harap sertakan perintah yang tepat yang Anda jalankan dan output dari perintah itu. Juga, jalankan skrip ini dan sertakan output yang disimpan ke system_info.txt sehingga kami dapat men -debug masalah Anda dengan lebih baik.
(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
Konten repositori Torchchat disediakan tanpa jaminan tentang kinerja atau kompatibilitas. Secara khusus, Torchchat membuat arsitektur model yang tersedia ditulis dalam Python untuk Pytorch yang mungkin tidak tampil dengan cara yang sama atau memenuhi standar yang sama dengan versi asli dari model -model tersebut. Saat menggunakan konten repositori TorchChat, termasuk arsitektur model apa pun, Anda bertanggung jawab penuh untuk menentukan kesesuaian menggunakan atau mendistribusikan kembali konten repositori TorchChat dan menanggung risiko apa pun yang terkait dengan penggunaan Anda dari konten repositori Torchchat atau model apa pun, output, atau hasil, baik sendiri maupun dalam kombinasi dengan teknologi lainnya. Selain itu, Anda mungkin memiliki kewajiban hukum lain yang mengatur penggunaan konten lain, seperti ketentuan layanan untuk model pihak ketiga, bobot, data, atau teknologi lainnya, dan Anda bertanggung jawab penuh untuk mematuhi semua kewajiban tersebut.
Terima kasih kepada komunitas untuk semua perpustakaan dan alat yang luar biasa yang telah Anda buat di sekitar inferensi LLM lokal.
Georgi Gerganov dan proyek GGML-nya menyoroti pemberdayaan berbasis masyarakat dan menginspirasi begitu banyak proyek lainnya.
Andrej Karpathy dan proyek LLAMA2.C -nya. Begitu banyak ide hebat (dan sederhana!) Di llama2.c yang telah kami adopsi secara langsung (baik ide maupun kode) dari repo -nya. Anda tidak akan pernah salah dengan mengikuti pekerjaan Andrej.
Michael Gschwind, Bert Maher, Scott Wolchok, Bin Bao, Chen Yang, Huamin Li dan Mu-Chu Li yang membangun versi pertama Nanogpt ( DSOGPT ) dengan induktor AOT yang membuktikan bahwa Aoti dapat digunakan untuk membangun LLM yang efisien, dan DSO adalah format distribusi yang layak untuk model. Nanogpt.
Bert Maher dan llama2.so -nya, yang dibangun di atas Andrej's llama2.c dan di dsogpt untuk menutup loop pada model llama dengan aotinductor.
Christian Puhrsch, Horace He, Joe Isaacson dan banyak lagi atas banyak kontribusi mereka dalam mempercepat model Genai dalam "apa saja, cepat!" Blog Pytorch.org, dan, khususnya, Horace He for GPT, Fast!, yang telah kami adopsi secara langsung (baik ide maupun kode) dari repo -nya.
Torchchat dirilis di bawah lisensi BSD 3. (Kode tambahan dalam distribusi ini dicakup oleh lisensi open source MIT dan Apache.) Namun, Anda mungkin memiliki kewajiban hukum lain yang mengatur penggunaan konten Anda, seperti ketentuan layanan untuk model pihak ketiga.