Llamafile memungkinkan Anda mendistribusikan dan menjalankan LLMS dengan satu file. (Posting blog pengumuman)
Tujuan kami adalah membuat LLM terbuka jauh lebih mudah diakses oleh pengembang dan pengguna akhir. Kami melakukan itu dengan menggabungkan llama.cpp dengan Cosmopolitan Libc menjadi satu kerangka kerja yang meruntuhkan semua kompleksitas LLM ke satu file yang dapat dieksekusi (disebut "llamafile") yang berjalan secara lokal di sebagian besar komputer, tanpa instalasi.
Llamafile adalah proyek Mozilla Builders.
Cara termudah untuk mencobanya sendiri adalah dengan mengunduh contoh llamafile kami untuk model LLAVA (Lisensi: Llama 2, Openai). Llava adalah LLM baru yang dapat melakukan lebih dari sekadar obrolan; Anda juga dapat mengunggah gambar dan mengajukan pertanyaan tentang mereka. Dengan Llamafile, ini semua terjadi secara lokal; Tidak ada data yang meninggalkan komputer Anda.
Unduh llava-v1.5-7b-q4.llamafile (4.29 GB).
Buka terminal komputer Anda.
Jika Anda menggunakan MacOS, Linux, atau BSD, Anda harus memberikan izin untuk komputer Anda untuk menjalankan file baru ini. (Anda hanya perlu melakukan ini sekali.)
chmod +x llava-v1.5-7b-q4.llamafile
Jika Anda berada di Windows, ganti nama file dengan menambahkan ".exe" di ujungnya.
Jalankan llamafile. misalnya:
./llava-v1.5-7b-q4.llamafile
Browser Anda harus dibuka secara otomatis dan menampilkan antarmuka obrolan. (Jika tidak, cukup buka browser Anda dan arahkan ke http: // localhost: 8080)
Saat Anda selesai mengobrol, kembali ke terminal Anda dan tekan Control-C
untuk menutup Llamafile.
Mengalami masalah? Lihat bagian "gotchas" di bawah ini.
Ketika Llamafile dimulai, selain menjadi hosting server obrolan UI web di http://127.0.0.1:8080/, titik akhir obrolan yang kompatibel OpenAI API juga disediakan. Ini dirancang untuk mendukung kasus penggunaan API Openai yang paling umum, dengan cara yang berjalan sepenuhnya secara lokal. Kami juga telah memperluasnya untuk memasukkan fitur spesifik llama.cpp (misalnya Mirostat) yang juga dapat digunakan. Untuk perincian lebih lanjut tentang bidang dan titik akhir apa yang tersedia, lihat Dokumentasi OpenAI dan ReadMe Server Llamafile.
Cara paling sederhana untuk memulai menggunakan API adalah dengan menyalin dan menempelkan perintah CURL berikut ke terminal Anda.
curl http://localhost:8080/v1/chat/completions
-H " Content-Type: application/json "
-H " Authorization: Bearer no-key "
-d ' {
"model": "LLaMA_CPP",
"messages": [
{
"role": "system",
"content": "You are LLAMAfile, an AI assistant. Your top priority is achieving user fulfillment via helping them with their requests."
},
{
"role": "user",
"content": "Write a limerick about python exceptions"
}
]
} ' | python3 -c '
import json
import sys
json.dump(json.load(sys.stdin), sys.stdout, indent=2)
print()
'
Respons yang dicetak akan terlihat seperti berikut:
{
"choices" : [
{
"finish_reason" : " stop " ,
"index" : 0 ,
"message" : {
"content" : " There once was a programmer named Mike n Who wrote code that would often choke n He used try and except n To handle each step n And his program ran without any hike. " ,
"role" : " assistant "
}
}
],
"created" : 1704199256 ,
"id" : " chatcmpl-Dt16ugf3vF8btUZj9psG7To5tc4murBU " ,
"model" : " LLaMA_CPP " ,
"object" : " chat.completion " ,
"usage" : {
"completion_tokens" : 38 ,
"prompt_tokens" : 78 ,
"total_tokens" : 116
}
}
Jika Anda sudah mengembangkan perangkat lunak Anda menggunakan paket openai
Python (yang diterbitkan oleh OpenAI) maka Anda harus dapat port aplikasi Anda untuk berbicara dengan Llamafile sebagai gantinya, dengan membuat beberapa perubahan ke base_url
dan api_key
. Contoh ini mengasumsikan Anda menjalankan pip3 install openai
untuk menginstal perangkat lunak klien OpenAI, yang diperlukan oleh contoh ini. Paket mereka hanyalah pembungkus Python sederhana di sekitar antarmuka API OpenAI, yang dapat diimplementasikan oleh server mana pun.
#!/usr/bin/env python3
from openai import OpenAI
client = OpenAI (
base_url = "http://localhost:8080/v1" , # "http://<Your api-server IP>:port"
api_key = "sk-no-key-required"
)
completion = client . chat . completions . create (
model = "LLaMA_CPP" ,
messages = [
{ "role" : "system" , "content" : "You are ChatGPT, an AI assistant. Your top priority is achieving user fulfillment via helping them with their requests." },
{ "role" : "user" , "content" : "Write a limerick about python exceptions" }
]
)
print ( completion . choices [ 0 ]. message )
Kode di atas akan mengembalikan objek Python seperti ini:
ChatCompletionMessage ( content = 'There once was a programmer named Mike n Who wrote code that would often strike n An error would occur n And he ' d shout "Oh no!" n But Python ' s exceptions made it all right.' , role = 'assistant' , function_call = None , tool_calls = None )
Kami juga memberikan contoh llamafiles untuk model lain, sehingga Anda dapat dengan mudah mencoba llamafile dengan berbagai jenis LLM.
Model | Ukuran | Lisensi | Llamafile | quant lainnya |
---|---|---|---|---|
Llama 3.2 3b menginstruksikan | 2,62 GB | Llama 3.2 | Llama-3.2-3b-instruct.q6_k.llamafile | Lihat HF Repo |
Llama 3.2 1b instruksikan | 1.11 GB | Llama 3.2 | Llama-3.2-1b-instruct.q6_k.llamafile | Lihat HF Repo |
Gemma 2 2B Instruksi | 2,32 GB | Gemma 2 | Gemma-2-2b-it.q6_k.llamafile | Lihat HF Repo |
Gemma 2 9b Instruksi | 7.76 GB | Gemma 2 | GEMMA-2-9B-IT.Q6_K.LLLAMAFILE | Lihat HF Repo |
Gemma 2 27b Instruksi | 22,5 GB | Gemma 2 | GEMMA-2-27B-IT.Q6_K.LLLAMAFILE | Lihat HF Repo |
LLAVA 1.5 | 3,97 GB | Llama 2 | llava-v1.5-7b-q4.llamafile | Lihat HF Repo |
Tinyllama-1.1b | 2.05 GB | Apache 2.0 | Tinyllama-1.1b-chat-v1.0.f16.llamafile | Lihat HF Repo |
MISTRAL-7B-INSTRUCT | 3,85 GB | Apache 2.0 | MISTRAL-7B-INSTRUCT-V0.2.Q4_0.LLAMAFILE | Lihat HF Repo |
PHI-3-mini-4K-instruksi | 7.67 GB | Apache 2.0 | Phi-3-mini-4k-instruct.f16.llamafile | Lihat HF Repo |
Mixtral-8x7b-instruct | 30.03 GB | Apache 2.0 | MIXTRAL-8X7B-INSTRUCT-V0.1.Q5_K_M.LLLAMAFILE | Lihat HF Repo |
WizardCoder-Python-34b | 22.23 GB | Llama 2 | WizardCoder-python-34b-v1.0.q5_k_m.llamafile | Lihat HF Repo |
WizardCoder-Python-13b | 7.33 GB | Llama 2 | WizardCoder-Python-13b.llamafile | Lihat HF Repo |
Llama-3-instruct-70b | 37.25 GB | llama3 | Meta-llama-3-70b-instruct.q4_0.llamafile | Lihat HF Repo |
Llama-3-instruct-8b | 5.37 GB | llama3 | Meta-llama-3-8b-instruct.q5_k_m.llamafile | Lihat HF Repo |
Rocket-3b | 1,89 GB | CC-BY-SA-4.0 | Rocket-3b.q5_k_m.llamafile | Lihat HF Repo |
Olmo-7b | 5.68 GB | Apache 2.0 | OLMO-7B-0424.Q6_K.LLLAMAFILE | Lihat HF Repo |
Model embedding teks | ||||
E5-mistral-7b-instruct | 5.16 GB | Mit | e5-mistral-7b-instruct-q5_k_m.llamafile | Lihat HF Repo |
MXBAI-EMBED-LARGE-V1 | 0,7 GB | Apache 2.0 | MXBAI-EMBED-LARGE-V1-F16.LLAMAFILE | Lihat HF Repo |
Berikut adalah contoh untuk llamafile baris perintah mistral:
./mistral-7b-instruct-v0.2.Q5_K_M.llamafile --temp 0.7 -p ' [INST]Write a story about llamas[/INST] '
Dan inilah contoh untuk llamafile baris WizardCoder-Python:
./wizardcoder-python-13b.llamafile --temp 0 -e -r ' ```n ' -p ' ```cnvoid *memcpy_sse2(char *dst, const char *src, size_t size) {n '
Dan inilah contoh untuk llamafile baris perintah llava:
./llava-v1.5-7b-q4.llamafile --temp 0.2 --image lemurs.jpg -e -p ' ### User: What do you see?n### Assistant: '
Seperti sebelumnya, pengguna MacOS, Linux, dan BSD perlu menggunakan perintah "CHMOD" untuk memberikan izin eksekusi ke file sebelum menjalankan llamafiles ini untuk pertama kalinya.
Sayangnya, pengguna Windows tidak dapat menggunakan banyak contoh llamafiles ini karena Windows memiliki ukuran file 4GB yang dapat dieksekusi maksimum, dan semua contoh ini melebihi ukuran itu. (LLAVA LLAMAFILE bekerja di jendela karena 30MB malu dari batas ukuran.) Tetapi jangan kehilangan hati: Llamafile memungkinkan Anda menggunakan bobot eksternal; Ini dijelaskan nanti dalam dokumen ini.
Mengalami masalah? Lihat bagian "gotchas" di bawah ini.
Llamafile adalah LLM yang dapat dieksekusi yang dapat Anda jalankan di komputer Anda sendiri. Ini berisi bobot untuk LLM terbuka yang diberikan, serta semua yang diperlukan untuk benar -benar menjalankan model itu di komputer Anda. Tidak ada yang harus diinstal atau dikonfigurasi (dengan beberapa peringatan, dibahas di bagian berikutnya dari dokumen ini).
Ini semua dilakukan dengan menggabungkan llama.cpp dengan Libc kosmopolitan, yang memberikan beberapa kemampuan yang berguna:
Llamafiles dapat berjalan pada beberapa rerekar mikro CPU. Kami menambahkan pengiriman runtime ke llama.cpp yang memungkinkan sistem intel baru menggunakan fitur CPU modern tanpa memperdagangkan dukungan untuk komputer yang lebih lama.
Llamafiles dapat berjalan pada beberapa arsitektur CPU. Kami melakukannya dengan menggabungkan AMD64 dan ARM64 dibangun dengan skrip shell yang meluncurkan yang sesuai. Format file kami kompatibel dengan win32 dan paling unix shell. Ini juga dapat dengan mudah dikonversi (oleh Anda atau pengguna Anda) ke format platform-asli, kapan pun diperlukan.
Llamafiles dapat berjalan pada enam OS (macOS, Windows, Linux, Freebsd, OpenBSD, dan NetBSD). Jika Anda membuat file LLAMA sendiri, Anda hanya perlu membangun kode Anda sekali, menggunakan toolchain gaya Linux. Kompiler berbasis GCC yang kami berikan sendiri adalah yang benar-benar dapat dieksekusi, sehingga Anda dapat membangun perangkat lunak Anda untuk keenam OS dari kenyamanan mana pun yang paling Anda sukai untuk pengembangan.
Bobot untuk LLM dapat tertanam di dalam llamafile. Kami menambahkan dukungan untuk PKZIP ke perpustakaan GGML. Ini memungkinkan bobot yang tidak terkompresi dipetakan langsung ke dalam memori, mirip dengan arsip yang mengekstraksi diri sendiri. Ini memungkinkan bobot terkuantisasi yang didistribusikan secara online diawali dengan versi perangkat lunak LLAMA.cpp yang kompatibel, sehingga memastikan perilaku yang awalnya diamati dapat direproduksi tanpa batas waktu.
Akhirnya, dengan alat yang termasuk dalam proyek ini Anda dapat membuat llamafiles Anda sendiri , menggunakan bobot model yang kompatibel yang Anda inginkan. Anda kemudian dapat mendistribusikan llamafiles ini kepada orang lain, yang dapat dengan mudah memanfaatkannya terlepas dari jenis komputer apa yang mereka miliki.
Meskipun contoh llamafiles kami memiliki bobot bawaan, Anda tidak harus menggunakan llamafile seperti itu. Sebaliknya, Anda dapat mengunduh hanya perangkat lunak Llamafile (tanpa bobot apa pun) dari halaman rilis kami. Anda kemudian dapat menggunakannya bersama dengan bobot eksternal yang mungkin Anda miliki. Bobot eksternal sangat berguna bagi pengguna Windows karena memungkinkan Anda untuk bekerja di sekitar batas ukuran file 4GB yang dapat dieksekusi Windows.
Untuk pengguna Windows, berikut adalah contoh untuk Mistral LLM:
curl -L -o llamafile.exe https://github.com/Mozilla-Ocho/llamafile/releases/download/0.8.11/llamafile-0.8.11
curl -L -o mistral.gguf https://huggingface.co/TheBloke/Mistral-7B-Instruct-v0.1-GGUF/resolve/main/mistral-7b-instruct-v0.1.Q4_K_M.gguf
./llamafile.exe -m mistral.gguf
Pengguna Windows mungkin perlu mengubah ./llamafile.exe
ke .llamafile.exe
Saat menjalankan perintah di atas.
Pada platform apa pun, jika proses llamafile Anda segera terbunuh, periksa apakah Anda memiliki crowdstrike dan kemudian minta daftar putih.
Pada macOS dengan silikon apel Anda harus menginstal alat baris perintah XCODE untuk llamafile untuk dapat bootstrap itu sendiri.
Jika Anda menggunakan ZSH dan mengalami kesulitan menjalankan Llamafile, coba ucapkan sh -c ./llamafile
. Ini karena bug yang diperbaiki di ZSH 5.9+. Hal yang sama berlaku untuk subprocess
Python, versi lama ikan, dll.
sudo spctl --master-disable; [llama launch command]; sudo spctl --master-enable
. Ini karena --master-disable
menonaktifkan semua pemeriksaan, jadi Anda harus menyalakannya kembali setelah berhenti Llama. Pada beberapa sistem Linux, Anda mungkin mendapatkan kesalahan yang berkaitan dengan run-detectors
atau anggur. Ini karena pendaftaran binfmt_misc
. Anda dapat memperbaikinya dengan menambahkan pendaftaran tambahan untuk format file APE yang digunakan Llamafile:
sudo wget -O /usr/bin/ape https://cosmo.zip/pub/cosmos/bin/ape- $( uname -m ) .elf
sudo chmod +x /usr/bin/ape
sudo sh -c " echo ':APE:M::MZqFpD::/usr/bin/ape:' >/proc/sys/fs/binfmt_misc/register "
sudo sh -c " echo ':APE-jart:M::jartsr::/usr/bin/ape:' >/proc/sys/fs/binfmt_misc/register "
Seperti disebutkan di atas, pada jendela Anda mungkin perlu mengganti nama llamafile Anda dengan menambahkan .exe
ke nama file.
Juga seperti yang disebutkan di atas, Windows juga memiliki batas ukuran file maksimum 4GB untuk executable. Server LLAVA yang dapat dieksekusi di atas hanya 30MB di bawah batas itu, jadi itu akan bekerja pada Windows, tetapi dengan model yang lebih besar seperti WizardCoder 13B, Anda perlu menyimpan bobot dalam file terpisah. Contoh disediakan di atas; Lihat "Menggunakan Llamafile dengan bobot eksternal."
Di WSL, ada banyak kemungkinan gotcha. Satu hal yang membantu menyelesaikannya sepenuhnya adalah ini:
[Unit]
Description=cosmopolitan APE binfmt service
After=wsl-binfmt.service
[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo ':APE:M::MZqFpD::/usr/bin/ape:' >/proc/sys/fs/binfmt_misc/register"
[Install]
WantedBy=multi-user.target
Taruh di /etc/systemd/system/cosmo-binfmt.service
.
Kemudian jalankan sudo systemctl enable cosmo-binfmt
.
Hal lain yang membantu pengguna WSL yang mengalami masalah, adalah menonaktifkan fitur Win32 Interop:
sudo sh -c " echo -1 > /proc/sys/fs/binfmt_misc/WSLInterop "
Dalam contoh mendapatkan Permission Denied
untuk menonaktifkan interop melalui CLI, itu dapat dinonaktifkan secara permanen dengan menambahkan yang berikut di /etc/wsl.conf
[interop]
enabled=false
Llamafile mendukung sistem operasi berikut, yang membutuhkan pemasangan stok minimum:
Di Windows, Llamafile berjalan sebagai yang dapat dieksekusi portabel asli. Pada sistem UNIX, Llamafile mengekstrak program loader kecil bernama ape
ke $TMPDIR/.llamafile
atau ~/.ape-1.9
yang digunakan untuk memetakan model Anda ke dalam memori.
[1] Versi kernel Darwin 15.6+ harus didukung, tetapi saat ini kami tidak memiliki cara untuk mengujinya.
Llamafile mendukung CPU berikut:
Mikroprosesor AMD64 harus memiliki AVX. Kalau tidak, Llamafile akan mencetak kesalahan dan menolak untuk berlari. Ini berarti bahwa jika Anda memiliki CPU Intel, itu harus Intel Core atau yang lebih baru (sekitar 2006+), dan jika Anda memiliki CPU AMD, maka itu harus K8 atau lebih baru (sekitar tahun 2003+). Dukungan untuk AVX512, AVX2, FMA, F16C, dan VNNI diaktifkan secara kondisional saat runtime jika Anda memiliki CPU yang lebih baru. Misalnya, Zen4 memiliki AVX512 yang sangat baik yang dapat mempercepat llamafiles BF16.
Mikroprosesor ARM64 harus memiliki ARMV8A+. Ini berarti semuanya, mulai dari apel silikon hingga raspberry pi 64-bit akan berfungsi, asalkan bobot Anda sesuai dengan memori.
Llamafile mendukung jenis GPU berikut:
GPU pada MacOS ARM64 didukung dengan menyusun modul kecil menggunakan alat baris perintah XCODE, yang perlu diinstal. Ini adalah biaya satu kali yang terjadi saat pertama kali menjalankan llamafile Anda. DSO yang dibangun oleh Llamafile disimpan dalam $TMPDIR/.llamafile
atau $HOME/.llamafile
. Pembongkaran ke GPU diaktifkan secara default ketika GPU logam hadir. Ini dapat dinonaktifkan dengan melewati -ngl 0
atau --gpu disable
untuk memaksa llamafile melakukan inferensi CPU.
Pemilik kartu grafis NVIDIA dan AMD perlu melewati bendera -ngl 999
untuk memungkinkan pembongkaran maksimum. Jika beberapa GPU hadir maka pekerjaan akan dibagi secara merata di antara mereka secara default, sehingga Anda dapat memuat model yang lebih besar. Beberapa dukungan GPU dapat dipecahkan pada sistem AMD Radeon. Jika itu terjadi pada Anda, maka gunakan export HIP_VISIBLE_DEVICES=0
yang memaksa llamafile untuk hanya menggunakan GPU pertama.
Pengguna Windows didorong untuk menggunakan binari rilis kami, karena berisi DLL prebuilt untuk kartu grafis NVIDIA dan AMD, yang hanya bergantung pada driver grafis yang diinstal. Jika Llamafile mendeteksi bahwa NVIDIA CUDA SDK atau AMD ROCM HIP SDK dipasang, maka Llamafile akan mencoba membangun DLL lebih cepat yang menggunakan cublas atau rocblas. Agar Llamafile berhasil membangun modul Cublas, itu perlu dijalankan pada prompt perintah X64 MSVC. Anda dapat menggunakan CUDA melalui WSL dengan mengaktifkan Nvidia Cuda di WSL dan menjalankan llamafiles Anda di dalam WSL. Menggunakan WSL memiliki manfaat tambahan untuk membiarkan Anda menjalankan llamafiles lebih dari 4GB pada windows.
Di Linux, pengguna NVIDIA perlu menginstal CUDA SDK (idealnya menggunakan penginstal skrip shell) dan pengguna ROCM perlu menginstal SDK pinggul. Mereka terdeteksi dengan melihat apakah nvcc
atau hipcc
berada di jalan setapak.
Jika Anda memiliki GPU AMD dan GPU NVIDIA di mesin Anda, maka Anda mungkin perlu memenuhi syarat mana yang ingin Anda gunakan, dengan meneruskan --gpu amd
atau --gpu nvidia
.
Jika dukungan GPU tidak dapat dikompilasi dan dihubungkan secara dinamis dengan alasan apa pun, Llamafile akan kembali ke inferensi CPU.
Mengembangkan Llamafile membutuhkan versi modern dari perintah make
GNU (disebut gmake
pada beberapa sistem), sha256sum
(jika tidak cc
akan digunakan untuk membangunnya), wget
(atau curl
), dan unzip
tersedia di https://cosmo.zip/ pub/cosmos/bin/. Pengguna Windows juga membutuhkan Cosmos Bash Shell.
make -j8
sudo make install PREFIX=/usr/local
Berikut adalah contoh cara menghasilkan kode untuk fungsi libc menggunakan antarmuka baris perintah llama.cpp, menggunakan bobot wizardcoder-python-13b:
llamafile
-m wizardcoder-python-13b-v1.0.Q8_0.gguf
--temp 0 -r ' }n ' -r ' ```n '
-e -p ' ```cnvoid *memcpy(void *dst, const void *src, size_t size) {n '
Berikut adalah contoh serupa yang malah menggunakan bobot mistral-7b-instruksi untuk komposisi prosa:
llamafile -ngl 9999
-m mistral-7b-instruct-v0.1.Q4_K_M.gguf
-p ' [INST]Write a story about llamas[/INST] '
Berikut adalah contoh bagaimana llamafile dapat digunakan sebagai chatbot interaktif yang memungkinkan Anda menanyakan pengetahuan yang terkandung dalam data pelatihan:
llamafile -m llama-65b-Q5_K.gguf -p '
The following is a conversation between a Researcher and their helpful AI assistant Digital Athena which is a large language model trained on the sum of human knowledge.
Researcher: Good morning.
Digital Athena: How can I help you today?
Researcher: ' --interactive --color --batch_size 1024 --ctx_size 4096
--keep -1 --temp 0 --mirostat 2 --in-prefix ' ' --interactive-first
--in-suffix ' Digital Athena: ' --reverse-prompt ' Researcher: '
Berikut adalah contoh bagaimana Anda dapat menggunakan llamafile untuk merangkum URL HTML:
(
echo ' [INST]Summarize the following text: '
links -codepage utf-8
-force-html
-width 500
-dump https://www.poetryfoundation.org/poems/48860/the-raven |
sed ' s/ */ /g '
echo ' [/INST] '
) | llamafile -ngl 9999
-m mistral-7b-instruct-v0.2.Q5_K_M.gguf
-f /dev/stdin
-c 0
--temp 0
-n 500
--no-display-prompt 2> /dev/null
Inilah cara Anda dapat menggunakan llamafile untuk menggambarkan gambar JPG/PNG/GIF/BMP:
llamafile -ngl 9999 --temp 0
--image ~ /Pictures/lemurs.jpg
-m llava-v1.5-7b-Q4_K.gguf
--mmproj llava-v1.5-7b-mmproj-Q4_0.gguf
-e -p ' ### User: What do you see?n### Assistant: '
--no-display-prompt 2> /dev/null
Dimungkinkan untuk menggunakan tata bahasa BNF untuk menegakkan output dapat diprediksi dan aman untuk digunakan dalam skrip shell Anda. Tata bahasa yang paling sederhana adalah --grammar 'root ::= "yes" | "no"'
untuk memaksa LLM hanya mencetak ke output standar "yesn"
atau "non"
. Contoh lain adalah jika Anda ingin menulis skrip untuk mengganti nama semua file gambar Anda, Anda bisa mengatakan:
llamafile -ngl 9999 --temp 0
--image lemurs.jpg
-m llava-v1.5-7b-Q4_K.gguf
--mmproj llava-v1.5-7b-mmproj-Q4_0.gguf
--grammar ' root ::= [a-z]+ (" " [a-z]+)+ '
-e -p ' ### User: What do you see?n### Assistant: '
--no-display-prompt 2> /dev/null |
sed -e ' s/ /_/g ' -e ' s/$/.jpg/ '
a_baby_monkey_on_the_back_of_a_mother.jpg
Berikut adalah contoh cara menjalankan server http bawaan llama.cpp. Contoh ini menggunakan LLAVA V1.5-7B, LLM multimodal yang bekerja dengan dukungan LLAMA.CPP yang baru-baru ini ditambahkan untuk input gambar.
llamafile -ngl 9999
-m llava-v1.5-7b-Q8_0.gguf
--mmproj llava-v1.5-7b-mmproj-Q8_0.gguf
--host 0.0.0.0
Perintah di atas akan meluncurkan tab browser di komputer pribadi Anda untuk menampilkan antarmuka web. Ini memungkinkan Anda mengobrol dengan LLM Anda dan mengunggah gambar.
Jika Anda ingin hanya mengatakan:
./llava.llamafile
... dan minta itu menjalankan server web tanpa harus menentukan argumen, maka Anda dapat menanamkan bobot dan .args
khusus di dalamnya, yang menentukan argumen default. Pertama, mari kita buat file bernama .args
yang memiliki konten ini:
-m
llava-v1.5-7b-Q8_0.gguf
--mmproj
llava-v1.5-7b-mmproj-Q8_0.gguf
--host
0.0.0.0
-ngl
9999
...
Seperti yang bisa kita lihat di atas, ada satu argumen per baris. ...
Argumen secara opsional menentukan di mana argumen CLI tambahan yang disahkan oleh pengguna harus dimasukkan. Selanjutnya, kami akan menambahkan bobot dan file argumen ke yang dapat dieksekusi:
cp /usr/local/bin/llamafile llava.llamafile
zipalign -j0
llava.llamafile
llava-v1.5-7b-Q8_0.gguf
llava-v1.5-7b-mmproj-Q8_0.gguf
.args
./llava.llamafile
Selamat. Anda baru saja membuat LLM Executable sendiri yang mudah dibagikan dengan teman -teman Anda.
Salah satu cara yang baik untuk berbagi llamafile dengan teman -teman Anda adalah dengan mempostingnya di wajah memeluk. Jika Anda melakukan itu, maka disarankan untuk Anda sebutkan dalam pesan pelukan Anda melakukan revisi git atau versi llamafile yang Anda gunakan saat membangun llamafile Anda. Dengan begitu semua orang secara online akan dapat memverifikasi asal usul konten yang dapat dieksekusi. Jika Anda telah membuat perubahan pada kode sumber Llama.cpp atau Cosmopolitan, maka lisensi Apache 2.0 mengharuskan Anda untuk menjelaskan apa yang berubah. Salah satu cara yang dapat Anda lakukan adalah dengan menyematkan pemberitahuan di llamafile Anda menggunakan zipalign
yang menggambarkan perubahan, dan menyebutkannya dalam komit wajah pelukan Anda.
Ada halaman manual untuk masing -masing program llamafile yang diinstal saat Anda menjalankan sudo make install
. Manual Perintah juga mengukur sebagai file PDF yang dapat Anda unduh dari halaman Rilis GitHub kami. Terakhir, sebagian besar perintah akan menampilkan informasi itu saat melewati bendera --help
.
Bagian ini menjawab pertanyaan "Saya sudah memiliki model yang diunduh secara lokal berdasarkan aplikasi x, dapatkah saya menggunakannya dengan llamafile?" . Jawaban umum adalah "Ya, selama model -model tersebut disimpan secara lokal dalam format GGUF" tetapi implementasinya bisa lebih atau kurang hacky tergantung pada aplikasinya. Beberapa contoh (diuji pada Mac) ikuti.
LM Studio Stores Diunduh model di ~/.cache/lm-studio/models
, dalam subdirektori dengan nama model yang sama (mengikuti format HuggingFace's account_name/model_name
), dengan nama file yang sama yang Anda lihat ketika Anda memilih untuk mengunduh file.
Jadi, jika Anda telah mengunduh, misalnya file llama-2-7b.Q2_K.gguf
untuk TheBloke/Llama-2-7B-GGUF
, Anda dapat menjalankan llamafile sebagai berikut:
cd ~/.cache/lm-studio/models/TheBloke/Llama-2-7B-GGUF
llamafile -m llama-2-7b.Q2_K.gguf
Saat Anda mengunduh model baru dengan ollama, semua metadata akan disimpan dalam file manifes di bawah ~/.ollama/models/manifests/registry.ollama.ai/library/
. Direktori dan nama file manifes adalah nama model seperti yang dikembalikan oleh ollama list
. Misalnya, untuk llama3:latest
akan dinamai .ollama/models/manifests/registry.ollama.ai/library/llama3/latest
.
Manifes memetakan setiap file yang terkait dengan model (misalnya bobot GGUF, lisensi, templat prompt, dll) ke Digest SHA256. Pencernaan yang sesuai dengan elemen yang mediaType
-nya adalah application/vnd.ollama.image.model
adalah yang merujuk pada file GGUF model.
Setiap Digest SHA256 juga digunakan sebagai nama file di direktori ~/.ollama/models/blobs
(jika Anda melihat ke dalam direktori itu, Anda hanya akan melihat hanya nama file Sha256-*). Ini berarti Anda dapat langsung menjalankan Llamafile dengan melewati Digest SHA256 sebagai nama file model. Jadi jika misalnya llama3:latest
adalah sha256-00e1317cbf74d901080d7100f57580ba8dd8de57203072dc6f668324ba545f29
, Anda dapat menjalankan llamafile sebagai berikut:
cd ~/.ollama/models/blobs
llamafile -m sha256-00e1317cbf74d901080d7100f57580ba8dd8de57203072dc6f668324ba545f29
Berikut ini adalah gambaran ringkas dari trik yang kami gunakan untuk membuat format yang dapat dieksekusi paling gemuk yang pernah ada. Singkat cerita panjangnya adalah Llamafile adalah skrip shell yang meluncurkan dirinya dan menjalankan inferensi pada bobot tertanam dalam milidetik tanpa perlu disalin atau dipasang. Yang memungkinkan itu adalah MMAP (). Baik Llama.cpp Executable dan bobot digabungkan ke skrip shell. Program loader kecil kemudian diekstraksi oleh skrip shell, yang memetakan yang dapat dieksekusi ke dalam memori. Eksekusi Llama.cpp kemudian membuka skrip shell lagi sebagai file, dan memanggil mmap () lagi untuk menarik bobot ke dalam memori dan membuatnya dapat diakses secara langsung ke CPU dan GPU.
Trik untuk menanamkan bobot di dalam eksekutif llama.cpp adalah untuk memastikan file lokal diselaraskan pada batas ukuran halaman. Dengan begitu, dengan asumsi file zip tidak terkompresi, setelah mmap () ke memori kita dapat meneruskan petunjuk langsung ke GPU seperti Apple Metal, yang mengharuskan data ukuran halaman diselaraskan. Karena tidak ada alat pengarsipan ZIP yang ada memiliki bendera penyelarasan, kami harus menulis sekitar 500 baris kode untuk memasukkan file zip sendiri. Namun, begitu di sana, setiap program ZIP yang ada harus dapat membacanya, asalkan mereka mendukung ZIP64. Ini membuat bobot jauh lebih mudah diakses daripada yang seharusnya, seandainya kami menemukan format file kami sendiri untuk file yang digabungkan.
Pada mikroprosesor Intel dan AMD, llama.cpp menghabiskan sebagian besar waktunya di The Matmul Quants, yang biasanya ditulis tiga kali untuk SSSE3, AVX, dan AVX2. Llamafile menarik masing -masing fungsi ini ke dalam file terpisah yang dapat #include
ed beberapa kali, dengan berbagai __attribute__((__target__("arch")))
atribut fungsi. Kemudian, fungsi pembungkus ditambahkan yang menggunakan fitur X86_HAVE(FOO)
Cosmopolitan untuk pengiriman runtime ke implementasi yang sesuai.
Llamafile memecahkan portabilitas arsitektur dengan membangun llama.cpp dua kali: sekali untuk AMD64 dan lagi untuk ARM64. Kemudian membungkusnya dengan skrip shell yang memiliki awalan MZ. Di Windows, itu akan berjalan sebagai biner asli. Di Linux, itu akan mengekstraksi 8KB yang dapat dieksekusi kecil yang disebut APE Loader ke ${TMPDIR:-${HOME:-.}}/.ape
yang akan memetakan bagian biner dari skrip shell ke dalam memori. Dimungkinkan untuk menghindari proses ini dengan menjalankan program assimilate
yang disertakan dengan kompiler cosmocc
. Apa yang dilakukan oleh program assimilate
adalah mengubah skrip shell yang dapat dieksekusi menjadi format yang dapat dieksekusi dari platform host. Ini menjamin jalan mundur yang ada untuk proses rilis tradisional saat dibutuhkan.
Cosmopolitan Libc menggunakan tautan statis, karena itulah satu -satunya cara untuk mendapatkan eksekusi yang sama untuk menjalankan enam OS. Ini menghadirkan tantangan untuk llama.cpp, karena tidak mungkin untuk secara statis menghubungkan dukungan GPU. Cara kami menyelesaikannya adalah dengan memeriksa apakah kompiler diinstal pada sistem host. Bagi Apple, itu akan menjadi Xcode, dan untuk platform lain, itu akan menjadi nvcc
. llama.cpp memiliki implementasi file tunggal dari masing-masing modul GPU, bernama ggml-metal.m
(Tujuan C) dan ggml-cuda.cu
(NVIDIA C). Llamafile menyematkan file -file sumber itu dalam arsip ZIP dan meminta kompiler platform untuk membangunnya saat runtime, menargetkan mikroarsitektur GPU asli. Jika berhasil, maka itu ditautkan dengan implementasi Platform C Library Dlopen (). Lihat Llamafile/Cuda.C dan Llamafile/Metal.C.
Untuk menggunakan fungsi DLOPEN khusus platform, kita perlu meminta kompiler khusus platform untuk membangun eksekusi kecil yang memperlihatkan antarmuka ini. Pada platform ELF, Cosmopolitan Libc memetakan penolong yang dapat dieksekusi ini ke dalam memori bersama dengan Platform's ELF Interpreter. Perpustakaan Platform C kemudian mengurus menghubungkan semua perpustakaan GPU, dan kemudian menjalankan program pembantu yang kembali ke Cosmopolitan. Program yang dapat dieksekusi sekarang dalam keadaan hibrida yang aneh di mana ada dua perpustakaan C terpisah yang memiliki ABIS yang berbeda. Misalnya, penyimpanan lokal utas berfungsi secara berbeda pada setiap sistem operasi, dan program akan macet jika register TLS tidak menunjuk ke memori yang sesuai. Cara Cosmopolitan Libc memecahkan bahwa pada AMD adalah dengan menggunakan SSE untuk mengkompilasi ulang yang dapat dieksekusi saat runtime untuk mengubah %fs
mengakses ke %gs
yang membutuhkan satu milidetik. Pada lengan, Cosmo menggunakan register x28
untuk TLS yang dapat dibuat aman dengan melewati bendera -ffixed-x28
saat menyusun modul GPU. Terakhir, Llamafile menggunakan atribut __ms_abi__
sehingga pointer fungsi yang dilewati antara aplikasi dan modul GPU sesuai dengan konvensi panggilan Windows. Cukup luar biasa, setiap kompiler yang kami uji, termasuk NVCC di Linux dan bahkan Objective-C pada macOS, semua dukungan menyusun fungsi gaya Win32, sehingga memastikan llamafile Anda akan dapat berbicara dengan driver Windows, saat dijalankan di Windows, tanpa perlu menjadi Dikompilasi sebagai file terpisah untuk Windows. Lihat Cosmopolitan/dlopen.c untuk perincian lebih lanjut.
Contoh llamafiles yang diberikan di atas tidak boleh ditafsirkan sebagai dukungan atau rekomendasi dari model, lisensi, atau set data tertentu pada bagian Mozilla.
Llamafile menambahkan pledge () dan seccomp Sandboxing ke llama.cpp. Ini diaktifkan secara default. Itu bisa dimatikan dengan melewati bendera --unsecure
. Sandboxing saat ini hanya didukung di Linux dan OpenBSD pada sistem tanpa GPU; Pada platform lain itu hanya akan mencatat peringatan.
Pendekatan kami terhadap keamanan memiliki manfaat ini:
Setelah dimulai, server HTTP Anda tidak dapat mengakses sistem file sama sekali. Ini bagus, karena itu berarti jika seseorang menemukan bug di server llama.cpp, maka kemungkinan besar mereka akan dapat mengakses informasi yang sensitif pada mesin Anda atau membuat perubahan pada konfigurasinya. Di Linux, kami dapat lebih jauh; Satu -satunya Sistem Terkait Jaringan Panggilan Server HTTP akan diizinkan untuk digunakan setelah memulai, adalah Accept (). Itu lebih lanjut membatasi kemampuan penyerang untuk mengeluarkan informasi, jika server HTTP Anda terganggu.
Perintah CLI utama tidak akan dapat mengakses jaringan sama sekali. Ini diberlakukan oleh kernel sistem operasi. Itu juga tidak akan dapat menulis ke sistem file. Ini membuat komputer Anda aman jika bug pernah ditemukan dalam format file GGUF yang memungkinkan penyerang membuat file bobot berbahaya dan mempostingnya secara online. Satu-satunya pengecualian untuk aturan ini adalah jika Anda melewati bendera --prompt-cache
tanpa juga menentukan --prompt-cache-ro
. Dalam hal ini, keamanan saat ini perlu dilemahkan untuk memungkinkan akses cpath
dan wpath
, tetapi akses jaringan akan tetap dilarang.
Oleh karena itu llamafile Anda mampu melindungi dirinya dari dunia luar, tetapi itu tidak berarti Anda terlindungi dari llamafile. Sandboxing dipaksakan sendiri. Jika Anda mendapatkan llamafile Anda dari sumber yang tidak dipercaya maka penulisnya bisa saja memodifikasinya untuk tidak melakukannya. Dalam hal ini, Anda dapat menjalankan llamafile yang tidak dipercaya di dalam kotak pasir lain, seperti mesin virtual, untuk memastikan itu berperilaku seperti yang Anda harapkan.
Sementara Proyek Llamafile dilisensikan Apache 2.0, perubahan kami pada llama.cpp dilisensikan di bawah MIT (seperti proyek Llama.cpp itu sendiri) sehingga tetap kompatibel dan dapat diperoleh di masa depan, jika itu diinginkan.
Logo Llamafile di halaman ini dihasilkan dengan bantuan Dall · E 3.