LlamaFile ช่วยให้คุณแจกจ่ายและเรียกใช้ LLMS ด้วยไฟล์เดียว (โพสต์บล็อกประกาศ)
เป้าหมายของเราคือการเปิด LLMS ให้เข้าถึงได้มากขึ้นทั้งนักพัฒนาและผู้ใช้ปลายทาง เรากำลังทำเช่นนั้นโดยการรวม llama.cpp เข้ากับ Cosmopolitan LiBC เข้ากับเฟรมเวิร์กหนึ่งที่ยุบความซับซ้อนทั้งหมดของ LLMs ลงไปที่ไฟล์ปฏิบัติการเดียว (เรียกว่า "llamafile") ที่ทำงานในคอมพิวเตอร์ส่วนใหญ่โดยไม่มีการติดตั้ง
LlamaFile เป็นโครงการ Mozilla Builders
วิธีที่ง่ายที่สุดในการลองด้วยตัวคุณเองคือการดาวน์โหลดตัวอย่าง LlamaFile ของเราสำหรับรุ่น LLAVA (ใบอนุญาต: Llama 2, OpenAI) Llava เป็น LLM ใหม่ที่สามารถทำได้มากกว่าแค่แชท นอกจากนี้คุณยังสามารถอัปโหลดภาพและถามคำถามเกี่ยวกับพวกเขา ด้วย llamafile สิ่งนี้ทั้งหมดเกิดขึ้นในท้องถิ่น; ไม่มีข้อมูลใดที่ทิ้งคอมพิวเตอร์ของคุณ
ดาวน์โหลด llava-v1.5-7b-q4.llamafile (4.29 GB)
เปิดเครื่องคอมพิวเตอร์ของคุณ
หากคุณใช้ MacOS, Linux หรือ BSD คุณจะต้องให้สิทธิ์สำหรับคอมพิวเตอร์ของคุณเพื่อเรียกใช้ไฟล์ใหม่นี้ (คุณต้องทำสิ่งนี้เพียงครั้งเดียว)
chmod +x llava-v1.5-7b-q4.llamafile
หากคุณอยู่ใน Windows เปลี่ยนชื่อไฟล์โดยเพิ่ม ".exe" ในตอนท้าย
เรียกใช้ llamafile เช่น:
./llava-v1.5-7b-q4.llamafile
เบราว์เซอร์ของคุณควรเปิดโดยอัตโนมัติและแสดงอินเทอร์เฟซแชท (ถ้าไม่ได้เปิดเบราว์เซอร์ของคุณแล้วชี้ไปที่ http: // localhost: 8080)
เมื่อคุณคุยกันเสร็จแล้วให้กลับไปที่เทอร์มินัลของคุณและกด Control-C
เพื่อปิด LLAMAFILE
มีปัญหา? ดูส่วน "gotchas" ด้านล่าง
เมื่อ LlamaFile เริ่มต้นนอกเหนือจากการโฮสต์เซิร์ฟเวอร์แชทเว็บ UI ที่ http://127.0.0.1:8080/, จุดสิ้นสุดการแชทที่เข้ากันได้ของ OpenAI API ก็มีให้เช่นกัน มันถูกออกแบบมาเพื่อรองรับกรณีการใช้งาน OpenAI API ที่พบบ่อยที่สุดในลักษณะที่ทำงานได้อย่างสมบูรณ์ในท้องถิ่น นอกจากนี้เรายังได้ขยายมันเพื่อรวมคุณสมบัติเฉพาะของ LLAMA.CPP (เช่น MiRostat) ที่อาจใช้ สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับฟิลด์และจุดสิ้นสุดใดที่มีให้อ้างอิงทั้งเอกสาร OpenAI และ LlamaFile Server ReadMe
วิธีที่ง่ายที่สุดในการเริ่มต้นใช้ API คือการคัดลอกและวางคำสั่ง Curl ต่อไปนี้ลงในเทอร์มินัลของคุณ
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()
'
คำตอบที่พิมพ์ควรมีลักษณะดังต่อไปนี้:
{
"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
}
}
หากคุณพัฒนาซอฟต์แวร์ของคุณแล้วโดยใช้แพ็คเกจ openai
Python (ที่เผยแพร่โดย OpenAI) คุณควรจะสามารถพอร์ตแอปของคุณเพื่อพูดคุยกับ LlamaFile แทนโดยทำการเปลี่ยนแปลงเล็กน้อยใน base_url
และ api_key
ตัวอย่างนี้จะถือว่าคุณเรียกใช้ pip3 install openai
เพื่อติดตั้งซอฟต์แวร์ไคลเอนต์ของ OpenAI ซึ่งเป็นสิ่งจำเป็นสำหรับตัวอย่างนี้ แพ็คเกจของพวกเขาเป็นเพียงเสื้อคลุมงูหลามอย่างง่ายรอบอินเทอร์เฟซ OpenAI API ซึ่งสามารถใช้งานได้โดยเซิร์ฟเวอร์ใด ๆ
#!/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 )
รหัสด้านบนจะส่งคืนวัตถุ Python เช่นนี้:
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 )
นอกจากนี้เรายังให้ตัวอย่าง Llamafiles สำหรับรุ่นอื่น ๆ ดังนั้นคุณสามารถลอง LlamaFile ด้วย LLMs ชนิดต่าง ๆ ได้อย่างง่ายดาย
แบบอย่าง | ขนาด | ใบอนุญาต | ชาวลลาม่า | quants อื่น ๆ |
---|---|---|---|---|
llama 3.2 3b แนะนำ | 2.62 GB | ลามะ 3.2 | llama-3.2-3b-instruct.q6_k.llamafile | ดู hf repo |
llama 3.2 1b แนะนำ | 1.11 GB | ลามะ 3.2 | LLAMA-3.2-1B-Instruct.q6_k.llamafile | ดู hf repo |
Gemma 2 2b สั่ง | 2.32 GB | เจมม่า 2 | gemma-2-2b-it.q6_k.llamafile | ดู hf repo |
Gemma 2 9b แนะนำ | 7.76 GB | เจมม่า 2 | gemma-2-9b-it.q6_k.llamafile | ดู hf repo |
Gemma 2 27b แนะนำ | 22.5 GB | เจมม่า 2 | gemma-2-27b-it.q6_k.llamafile | ดู hf repo |
llava 1.5 | 3.97 GB | ลามะ 2 | llava-v1.5-7b-q4.llamafile | ดู hf repo |
tinyllama-1.1b | 2.05 GB | Apache 2.0 | tinyllama-1.1b-chat-v1.0.f16.llamafile | ดู hf repo |
Mistral-7b-Instruct | 3.85 GB | Apache 2.0 | MISTRAL-7B-Instruct-v0.2.q4_0.llamafile | ดู hf repo |
PHI-3-MINI-4K-Instruct | 7.67 GB | Apache 2.0 | phi-3-mini-4k-instruct.f16.llamafile | ดู hf repo |
Mixtral-8x7b-Instruct | 30.03 GB | Apache 2.0 | mixtral-8x7b-instruct-v0.1.q5_k_m.llamafile | ดู hf repo |
WizardCoder-Python-34B | 22.23 GB | ลามะ 2 | WizardCoder-Python-34b-v1.0.q5_k_m.llamafile | ดู hf repo |
WizardCoder-Python-13b | 7.33 GB | ลามะ 2 | WizardCoder-Python-13b.llamafile | ดู hf repo |
LLAMA-3-Instruct-70B | 37.25 GB | ลามะ 3 | meta-llama-3-70b-instruct.q4_0.llamafile | ดู hf repo |
LLAMA-3-Instruct-8B | 5.37 GB | ลามะ 3 | meta-llama-3-8b-instruct.q5_k_m.llamafile | ดู hf repo |
Rocket-3b | 1.89 GB | CC-BY-SA-4.0 | Rocket-3b.q5_k_m.llamafile | ดู hf repo |
Olmo-7b | 5.68 GB | Apache 2.0 | olmo-7b-0424.q6_k.llamafile | ดู hf repo |
โมเดลการฝังข้อความ | ||||
E5-Mistral-7b-Instruct | 5.16 GB | มิกซ์ | e5-mistral-7b-instruct-q5_k_m.llamafile | ดู hf repo |
MxBai-embed-v1 | 0.7 GB | Apache 2.0 | MxBai-embed-large-v1-f16.llamafile | ดู hf repo |
นี่คือตัวอย่างสำหรับ llamafile บรรทัดคำสั่ง mistral:
./mistral-7b-instruct-v0.2.Q5_K_M.llamafile --temp 0.7 -p ' [INST]Write a story about llamas[/INST] '
และนี่คือตัวอย่างสำหรับ wizardcoder-python line llamafile: llamafile:
./wizardcoder-python-13b.llamafile --temp 0 -e -r ' ```n ' -p ' ```cnvoid *memcpy_sse2(char *dst, const char *src, size_t size) {n '
และนี่คือตัวอย่างสำหรับ llava-llame llamafile: llava คำสั่ง:
./llava-v1.5-7b-q4.llamafile --temp 0.2 --image lemurs.jpg -e -p ' ### User: What do you see?n### Assistant: '
ก่อนหน้านี้ผู้ใช้ MacOS, Linux และ BSD จะต้องใช้คำสั่ง "CHMOD" เพื่อให้สิทธิ์การดำเนินการกับไฟล์ก่อนที่จะเรียกใช้ llamafiles เหล่านี้เป็นครั้งแรก
น่าเสียดายที่ผู้ใช้ Windows ไม่สามารถใช้ประโยชน์จากตัวอย่างเหล่านี้จำนวนมากเหล่านี้ได้เนื่องจาก Windows มีขนาดไฟล์ที่ใช้งานได้สูงสุด 4GB และตัวอย่างทั้งหมดเหล่านี้เกินขนาดนั้น (Llava Llamafile ทำงานบน Windows เพราะมันมีขนาดเกิน 30MB ที่มีขนาดเกินขนาด) แต่อย่าเสียหัวใจ: LlamaFile ช่วยให้คุณใช้น้ำหนักภายนอกได้ สิ่งนี้อธิบายไว้ในภายหลังในเอกสารนี้
มีปัญหา? ดูส่วน "gotchas" ด้านล่าง
Llamafile เป็น LLM ที่สามารถเรียกใช้งานได้ซึ่งคุณสามารถทำงานบนคอมพิวเตอร์ของคุณเองได้ มันมีน้ำหนักสำหรับ LLM แบบเปิดที่กำหนดรวมถึงทุกสิ่งที่จำเป็นในการเรียกใช้โมเดลนั้นบนคอมพิวเตอร์ของคุณ ไม่มีอะไรจะติดตั้งหรือกำหนดค่า (มีคำเตือนสองสามข้อกล่าวถึงในส่วนต่อไปของเอกสารนี้)
ทั้งหมดนี้ประสบความสำเร็จโดยการรวม llama.cpp กับ Cosmopolitan LIBC ซึ่งให้ความสามารถที่เป็นประโยชน์:
Llamafiles สามารถทำงานบน CPU microarchitectures หลายตัว เราเพิ่มรันไทม์ส่งไปยัง llama.cpp ที่ให้ระบบ Intel ใหม่ใช้คุณสมบัติ CPU ที่ทันสมัยโดยไม่ต้องแลกเปลี่ยนการสนับสนุนสำหรับคอมพิวเตอร์รุ่นเก่า
Llamafiles สามารถทำงานบนสถาปัตยกรรม CPU หลายแห่ง เราทำเช่นนั้นโดยการเชื่อมต่อ AMD64 และ ARM64 สร้างด้วยเชลล์สคริปต์ที่เปิดตัวสคริปต์ที่เหมาะสม รูปแบบไฟล์ของเราเข้ากันได้กับ Win32 และเชลล์ UNIX ส่วนใหญ่ นอกจากนี้ยังสามารถแปลงได้อย่างง่ายดาย (โดยคุณหรือผู้ใช้ของคุณ) เป็นรูปแบบแพลตฟอร์ม-พื้นเมืองเมื่อต้องการ
Llamafiles สามารถทำงานบนหก OSE (MacOS, Windows, Linux, FreeBSD, OpenBSD และ NETBSD) หากคุณสร้างไฟล์ Llama ของคุณเองคุณจะต้องสร้างรหัสของคุณเพียงครั้งเดียวโดยใช้เครื่องมือแบบลินุกซ์ คอมไพเลอร์ที่ใช้ GCC ที่เราให้ไว้นั้นเป็นแบบพกพาที่ใช้งานได้จริงดังนั้นคุณสามารถสร้างซอฟต์แวร์ของคุณสำหรับ OSE ทั้งหกจากความสะดวกสบายไม่ว่าคุณจะต้องการการพัฒนามากที่สุด
น้ำหนักสำหรับ LLM สามารถฝังได้ภายใน llamafile เราเพิ่มการสนับสนุนสำหรับ PKZIP ไปยังไลบรารี GGML สิ่งนี้จะช่วยให้น้ำหนักที่ไม่บีบอัดจะถูกแมปโดยตรงในหน่วยความจำคล้ายกับการสกัดด้วยตนเอง มันช่วยให้น้ำหนักการกระจายแบบเชิงปริมาณออนไลน์ได้รับคำนำหน้าด้วยซอฟต์แวร์ LLAMA.CPP รุ่นที่เข้ากันได้ดังนั้นจึงมั่นใจได้ว่าพฤติกรรมที่สังเกตได้ในตอนแรกสามารถทำซ้ำได้อย่างไม่มีกำหนด
ในที่สุดด้วยเครื่องมือที่รวมอยู่ในโครงการนี้คุณสามารถสร้าง llamafiles ของคุณ เอง โดยใช้น้ำหนักโมเดลที่เข้ากันได้ใด ๆ ที่คุณต้องการ จากนั้นคุณสามารถแจกจ่าย llamafiles เหล่านี้ให้กับคนอื่น ๆ ที่สามารถใช้ประโยชน์จากพวกเขาได้อย่างง่ายดายโดยไม่คำนึงถึงคอมพิวเตอร์ประเภทใด
แม้ว่าตัวอย่าง Llamafiles ของเราจะมีน้ำหนักในตัว แต่คุณไม่ จำเป็น ต้องใช้ LlamaFile ด้วยวิธีนั้น แต่คุณสามารถดาวน์โหลดได้ เพียง ซอฟต์แวร์ LlamaFile (โดยไม่มีน้ำหนักรวมอยู่) จากหน้ารีลีสของเรา จากนั้นคุณสามารถใช้มันควบคู่ไปกับน้ำหนักภายนอกใด ๆ ที่คุณอาจมีในมือ น้ำหนักภายนอกมีประโยชน์อย่างยิ่งสำหรับผู้ใช้ Windows เพราะช่วยให้คุณสามารถแก้ไขข้อ จำกัด ขนาดไฟล์ 4GB ที่ใช้งานได้ของ Windows '
สำหรับผู้ใช้ Windows นี่คือตัวอย่างสำหรับ 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
ผู้ใช้ Windows อาจต้องเปลี่ยน ./llamafile.exe
เป็น .llamafile.exe
เมื่อเรียกใช้คำสั่งด้านบน
บนแพลตฟอร์มใด ๆ หากกระบวนการ llamafile ของคุณถูกฆ่าตายทันทีตรวจสอบว่าคุณมี crowdstrike แล้วขอให้มีการอนุญาต
บน MacOS กับ Apple Silicon คุณต้องติดตั้งเครื่องมือบรรทัดคำสั่ง Xcode สำหรับ LlamaFile เพื่อให้สามารถบูทสแตรปได้
หากคุณใช้ ZSH และมีปัญหาในการใช้ LlamaFile ลองพูดว่า sh -c ./llamafile
นี่เป็นเพราะข้อผิดพลาดที่ได้รับการแก้ไขใน ZSH 5.9+ เช่นเดียวกับกรณีของ Python subprocess
, ปลารุ่นเก่า ฯลฯ
sudo spctl --master-disable; [llama launch command]; sudo spctl --master-enable
นี่เป็นเพราะ --master-disable
ปิดใช้งานการตรวจสอบ ทั้งหมด ดังนั้นคุณต้องเปิดใหม่หลังจากออกจาก Llama ในระบบ Linux บางระบบคุณอาจได้รับข้อผิดพลาดที่เกี่ยวข้องกับ run-detectors
หรือไวน์ นี่เป็นเพราะการลงทะเบียน binfmt_misc
คุณสามารถแก้ไขได้โดยการเพิ่มการลงทะเบียนเพิ่มเติมสำหรับรูปแบบไฟล์ลิง 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 "
ดังที่ได้กล่าวไว้ข้างต้นบน Windows คุณอาจต้องเปลี่ยนชื่อ LlamaFile ของคุณโดยเพิ่ม .exe
ลงในชื่อไฟล์
ตามที่กล่าวไว้ข้างต้น Windows ยังมีขีด จำกัด ขนาดไฟล์สูงสุด 4GB สำหรับการดำเนินการ เซิร์ฟเวอร์ LLAVA ที่ปฏิบัติการได้ด้านบนเป็นเพียง 30MB ขี้อายของขีด จำกัด นั้นดังนั้นมันจะทำงานบน Windows แต่ด้วยรุ่นที่ใหญ่กว่าเช่น WizardCoder 13B คุณต้องเก็บน้ำหนักไว้ในไฟล์แยกต่างหาก ตัวอย่างมีอยู่ด้านบน ดู "การใช้ llamafile กับน้ำหนักภายนอก"
บน WSL มี gotchas ที่เป็นไปได้มากมาย สิ่งหนึ่งที่ช่วยแก้ปัญหาได้อย่างสมบูรณ์คือ:
[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
ใส่ไว้ใน /etc/systemd/system/cosmo-binfmt.service
จากนั้นเรียกใช้ sudo systemctl enable cosmo-binfmt
อีกสิ่งหนึ่งที่ช่วยผู้ใช้ WSL ที่ประสบปัญหาคือการปิดใช้งานคุณสมบัติ InterOP Win32:
sudo sh -c " echo -1 > /proc/sys/fs/binfmt_misc/WSLInterop "
ในตัวอย่างของการได้รับ Permission Denied
การปิดใช้งาน interop ผ่าน CLI สามารถปิดใช้งานได้อย่างถาวรโดยการเพิ่มสิ่งต่อไปนี้ใน /etc/wsl.conf
[interop]
enabled=false
LlamaFile รองรับระบบปฏิบัติการต่อไปนี้ซึ่งต้องมีการติดตั้งสต็อกขั้นต่ำ:
บน Windows LlamaFile ทำงานเป็นแบบพกพาแบบพกพาได้ ในระบบ UNIX LlamaFile จะแยกโปรแกรมโหลดเดอร์ขนาดเล็กชื่อ ape
ถึง $TMPDIR/.llamafile
หรือ ~/.ape-1.9
ซึ่งใช้ในการแมปโมเดลของคุณลงในหน่วยความจำ
[1] ควร ได้รับการสนับสนุนเวอร์ชันเคอร์เนลดาร์วิน 15.6+ แต่ขณะนี้เราไม่มีวิธีทดสอบ
LlamaFile รองรับ CPU ต่อไปนี้:
ไมโครโปรเซสเซอร์ AMD64 ต้องมี AVX มิฉะนั้น llamafile จะพิมพ์ข้อผิดพลาดและปฏิเสธที่จะทำงาน ซึ่งหมายความว่าหากคุณมี CPU Intel จะต้องเป็น Intel Core หรือใหม่กว่า (ประมาณปี 2006+) และหากคุณมี CPU AMD นั้นจะต้องเป็น K8 หรือใหม่กว่า (Circa 2003+) การสนับสนุน AVX512, AVX2, FMA, F16C และ VNNI นั้นเปิดใช้งานอย่างมีเงื่อนไขเมื่อรันไทม์หากคุณมี CPU รุ่นใหม่ ตัวอย่างเช่น ZEN4 มี AVX512 ที่ดีมากซึ่งสามารถเร่งความเร็ว BF16 Llamafiles
ไมโครโปรเซสเซอร์ ARM64 ต้องมี ARMV8A+ ซึ่งหมายความว่าทุกอย่างตั้งแต่ Apple Silicon ไปจนถึง Raspberry Pis 64 บิตจะทำงานได้หากน้ำหนักของคุณพอดีกับหน่วยความจำ
LlamaFile รองรับ GPUs ต่อไปนี้:
GPU บน MacOS ARM64 ได้รับการสนับสนุนโดยการรวบรวมโมดูลขนาดเล็กโดยใช้เครื่องมือบรรทัดคำสั่ง XCODE ซึ่งจำเป็นต้องติดตั้ง นี่เป็นค่าใช้จ่ายครั้งเดียวที่เกิดขึ้นในครั้งแรกที่คุณเรียกใช้ LlamaFile DSO ที่สร้างโดย llamafile จะถูกเก็บไว้ใน $TMPDIR/.llamafile
หรือ $HOME/.llamafile
การถ่ายโอนไปยัง GPU ถูกเปิดใช้งานโดยค่าเริ่มต้นเมื่อมี GPU โลหะอยู่ สิ่งนี้สามารถปิดการใช้งานได้โดยผ่าน -ngl 0
หรือ --gpu disable
เพื่อบังคับให้ LlamaFile ทำการอนุมาน CPU
เจ้าของการ์ดกราฟิก NVIDIA และ AMD จำเป็นต้องผ่านการตั้งค่าสถานะ -ngl 999
เพื่อเปิดใช้งานการขนถ่ายสูงสุด หากมี GPU หลายรายการงานจะถูกแบ่งอย่างเท่าเทียมกันในหมู่พวกเขาโดยค่าเริ่มต้นดังนั้นคุณสามารถโหลดรุ่นที่ใหญ่กว่าได้ การสนับสนุน GPU หลายครั้งอาจถูกทำลายในระบบ AMD Radeon หากสิ่งนั้นเกิดขึ้นกับคุณให้ใช้ export HIP_VISIBLE_DEVICES=0
ซึ่งบังคับให้ LlamaFile ใช้ GPU แรกเท่านั้น
ผู้ใช้ Windows ได้รับการสนับสนุนให้ใช้ไบนารีรุ่นของเราเนื่องจากมี DLL ที่สร้างไว้ล่วงหน้าสำหรับการ์ดกราฟิก NVIDIA และ AMD ซึ่งขึ้นอยู่กับไดรเวอร์กราฟิกที่ติดตั้งเท่านั้น หาก LlamaFile ตรวจพบว่ามีการติดตั้ง Cuda SDK ของ Nvidia หรือ AMD ของ ROCM HIP SDK แล้ว LlamaFile จะพยายามสร้าง DLL ที่เร็วขึ้นที่ใช้ Cublas หรือ Rocblas เพื่อให้ LlamaFile ประสบความสำเร็จในการสร้างโมดูล Cublas นั้นจะต้องทำงานบนพรอมต์คำสั่ง X64 MSVC คุณสามารถใช้ CUDA ผ่าน WSL ได้โดยเปิดใช้งาน Nvidia Cuda บน WSL และใช้งาน llamafiles ของคุณภายใน WSL การใช้ WSL มีประโยชน์เพิ่มเติมในการให้คุณเรียกใช้ Llamafiles มากกว่า 4GB บน Windows
บน Linux ผู้ใช้ NVIDIA จะต้องติดตั้ง CUDA SDK (โดยใช้เครื่องติดตั้งเชลล์สคริปต์) และผู้ใช้ ROCM จำเป็นต้องติดตั้ง HIP SDK พวกเขาตรวจพบโดยมองหาว่า nvcc
หรือ hipcc
อยู่บนเส้นทางหรือไม่
หากคุณมีทั้ง AMD GPU และ NVIDIA GPU ในเครื่องของคุณคุณอาจต้องมีคุณสมบัติที่คุณต้องการใช้โดยผ่าน --gpu amd
หรือ --gpu nvidia
ในกรณีที่การสนับสนุน GPU ไม่สามารถรวบรวมและเชื่อมโยงแบบไดนามิกได้ทันทีไม่ว่าด้วยเหตุผลใดก็ตาม LlamaFile จะกลับไปที่การอนุมาน CPU
การพัฒนาบน llamafile ต้องใช้คำสั่ง GNU make
รุ่นทันสมัย (เรียกว่า gmake
ในบางระบบ unzip
, sha256sum
(มิฉะนั้น cc
จะถูกใช้เพื่อสร้าง), wget
(หรือ curl
) Pub/Cosmos/Bin/ ผู้ใช้ Windows ต้องการเชลล์ Cosmos Bash ด้วย
make -j8
sudo make install PREFIX=/usr/local
นี่คือตัวอย่างของวิธีการสร้างรหัสสำหรับฟังก์ชั่น libc โดยใช้อินเตอร์เฟสบรรทัดคำสั่ง llama.cpp โดยใช้ 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 '
นี่คือตัวอย่างที่คล้ายกันที่ใช้น้ำหนัก Mistral-7b-Instruct แทนการแต่งเพลงร้อยแก้ว:
llamafile -ngl 9999
-m mistral-7b-instruct-v0.1.Q4_K_M.gguf
-p ' [INST]Write a story about llamas[/INST] '
นี่คือตัวอย่างของวิธีที่ LlamaFile สามารถใช้เป็น chatbot แบบโต้ตอบที่ช่วยให้คุณสอบถามความรู้ที่มีอยู่ในข้อมูลการฝึกอบรม:
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: '
นี่คือตัวอย่างของวิธีที่คุณสามารถใช้ llamafile เพื่อสรุป 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
นี่คือวิธีที่คุณสามารถใช้ LlamaFile เพื่ออธิบายภาพ 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
เป็นไปได้ที่จะใช้ BNF Grammar เพื่อบังคับใช้เอาต์พุตสามารถคาดการณ์ได้และปลอดภัยในการใช้งานในเชลล์สคริปต์ของคุณ ไวยากรณ์ที่ง่ายที่สุดคือ --grammar 'root ::= "yes" | "no"'
เพื่อบังคับให้ LLM พิมพ์เฉพาะเอาต์พุตมาตรฐานทั้ง "yesn"
หรือ "non"
อีกตัวอย่างหนึ่งคือถ้าคุณต้องการเขียนสคริปต์เพื่อเปลี่ยนชื่อไฟล์รูปภาพทั้งหมดของคุณคุณสามารถพูดได้ว่า:
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
นี่คือตัวอย่างของวิธีเรียกใช้เซิร์ฟเวอร์ HTTP ในตัวของ LLAMA.CPP ตัวอย่างนี้ใช้ LLAVA V1.5-7B ซึ่งเป็น LLM หลายรูปแบบที่ทำงานกับการสนับสนุนที่เพิ่มขึ้นของ LLAMA.CPP สำหรับอินพุตภาพ
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
คำสั่งด้านบนจะเปิดแท็บเบราว์เซอร์บนคอมพิวเตอร์ส่วนบุคคลของคุณเพื่อแสดงเว็บอินเตอร์เฟส ช่วยให้คุณแชทกับ LLM ของคุณและอัปโหลดรูปภาพไปได้
ถ้าคุณต้องการที่จะพูดว่า:
./llava.llamafile
... และให้ใช้งานเว็บเซิร์ฟเวอร์โดยไม่ต้องระบุอาร์กิวเมนต์จากนั้นคุณสามารถฝังทั้งน้ำหนักและ .args
พิเศษภายในซึ่งระบุอาร์กิวเมนต์เริ่มต้น ก่อนอื่นมาสร้างไฟล์ชื่อ .args
ที่มีเนื้อหานี้:
-m
llava-v1.5-7b-Q8_0.gguf
--mmproj
llava-v1.5-7b-mmproj-Q8_0.gguf
--host
0.0.0.0
-ngl
9999
...
อย่างที่เราเห็นข้างต้นมีข้อโต้แย้งหนึ่งข้อต่อบรรทัด อาร์กิวเมนต์ ...
เลือกระบุว่ามีการแทรกอาร์กิวเมนต์ CLI เพิ่มเติมใด ๆ ที่ผู้ใช้จะถูกแทรก ต่อไปเราจะเพิ่มทั้งน้ำหนักและไฟล์อาร์กิวเมนต์ลงในไฟล์ปฏิบัติการ:
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
ยินดีด้วย. คุณเพิ่งสร้าง LLM ของคุณเองซึ่งง่ายต่อการแบ่งปันกับเพื่อนของคุณ
วิธีหนึ่งที่ดีในการแบ่งปัน llamafile กับเพื่อนของคุณคือการโพสต์บนใบหน้ากอด หากคุณทำเช่นนั้นขอแนะนำให้คุณพูดถึงใน Hugging Face Commit ของคุณส่งข้อความว่า Git Revision หรือ LlamaFile เวอร์ชันที่คุณใช้เมื่อสร้าง llamafile ของคุณ ด้วยวิธีนี้ทุกคนออนไลน์จะสามารถตรวจสอบที่มาของเนื้อหาที่ใช้งานได้ หากคุณได้ทำการเปลี่ยนแปลงซอร์สโค้ด Llama.cpp หรือ Cosmopolitan แล้วใบอนุญาต Apache 2.0 จะต้องให้คุณอธิบายสิ่งที่เปลี่ยนแปลง วิธีหนึ่งที่คุณสามารถทำได้คือการฝังประกาศใน Llamafile ของคุณโดยใช้ zipalign
ที่อธิบายการเปลี่ยนแปลงและพูดถึงมันในการกอดใบหน้าของคุณ
มีหน้าด้วยตนเองสำหรับแต่ละโปรแกรม LlamaFile ที่ติดตั้งเมื่อคุณเรียกใช้ sudo make install
คู่มือคำสั่งยังเป็นประเภทเรียงลำดับเป็นไฟล์ PDF ที่คุณสามารถดาวน์โหลดได้จากหน้า GitHub Releases ของเรา สุดท้ายคำสั่งส่วนใหญ่จะแสดงข้อมูลนั้นเมื่อผ่านธง --help
ส่วนนี้ตอบคำถาม "ฉันมีโมเดลที่ดาวน์โหลดในเครื่องด้วยแอปพลิเคชัน X แล้วฉันสามารถใช้กับ LlamaFile ได้หรือไม่?" - คำตอบทั่วไปคือ "ใช่ตราบใดที่โมเดลเหล่านั้นถูกเก็บไว้ในรูปแบบ GGUF" แต่การใช้งานอาจมีการแฮ็กมากหรือน้อยขึ้นอยู่กับแอปพลิเคชัน ตัวอย่างบางส่วน (ทดสอบบน Mac) ติดตาม
LM Studio เก็บโมเดลที่ดาวน์โหลดมาใน ~/.cache/lm-studio/models
ในไดเรกทอรีย่อยที่มีชื่อเดียวกันของรุ่น (ตามรูปแบบ account_name/model_name
ของ HuggingFace) พร้อมชื่อไฟล์เดียวกับที่คุณเห็นเมื่อคุณเลือกดาวน์โหลดไฟล์
ดังนั้นหากคุณดาวน์โหลดเช่นไฟล์ llama-2-7b.Q2_K.gguf
สำหรับ TheBloke/Llama-2-7B-GGUF
คุณสามารถเรียกใช้ llamafile ได้ดังนี้:
cd ~/.cache/lm-studio/models/TheBloke/Llama-2-7B-GGUF
llamafile -m llama-2-7b.Q2_K.gguf
เมื่อคุณดาวน์โหลดโมเดลใหม่กับ Ollama ข้อมูลเมตาทั้งหมดจะถูกเก็บไว้ในไฟล์รายการภายใต้ ~/.ollama/models/manifests/registry.ollama.ai/library/
ชื่อไดเรกทอรีและรายการไฟล์เป็นชื่อรุ่นที่ส่งคืนโดย ollama list
ตัวอย่างเช่นสำหรับ llama3:latest
จะถูกตั้งชื่อว่า .ollama/models/manifests/registry.ollama.ai/library/llama3/latest
รายการแผนที่แต่ละไฟล์ที่เกี่ยวข้องกับโมเดล (เช่นน้ำหนัก GGUF, ใบอนุญาต, เทมเพลตพรอมต์ ฯลฯ ) ไปยัง SHA256 Digest digest ที่สอดคล้องกับองค์ประกอบที่มี mediaType
เป็น application/vnd.ollama.image.model
เป็นไฟล์ที่อ้างถึงไฟล์ GGUF ของรุ่น
แต่ละ sha256 digest ยังใช้เป็นชื่อไฟล์ในไดเรกทอรี ~/.ollama/models/blobs
(ถ้าคุณดูไดเรกทอรีนั้นคุณจะเห็น เฉพาะ ชื่อไฟล์ sha256-*) ซึ่งหมายความว่าคุณสามารถเรียกใช้ LlamaFile โดยตรงโดยผ่าน SHA256 Digest เป็นชื่อไฟล์รุ่น ดังนั้นถ้าเช่น llama3:latest
คือ sha256-00e1317cbf74d901080d7100f57580ba8dd8de57203072dc6f668324ba545f29
cd ~/.ollama/models/blobs
llamafile -m sha256-00e1317cbf74d901080d7100f57580ba8dd8de57203072dc6f668324ba545f29
นี่คือภาพรวมสั้น ๆ ของกลเม็ดที่เราใช้ในการสร้างรูปแบบการดำเนินการที่อ้วนที่สุดเท่าที่เคยมีมา เรื่องสั้นเรื่องยาวคือ Llamafile เป็นสคริปต์เชลล์ที่เปิดตัวและเรียกใช้การอนุมานบนน้ำหนักฝังตัวในมิลลิวินาทีโดยไม่จำเป็นต้องคัดลอกหรือติดตั้ง สิ่งที่ทำให้เป็นไปได้คือ MMAP () ทั้ง Llama.CPP ปฏิบัติการได้และน้ำหนักถูกต่อกันบนสคริปต์เชลล์ โปรแกรมโหลดเดอร์ขนาดเล็กจะถูกดึงออกมาโดยเชลล์สคริปต์ซึ่งแมปการทำงานเข้ากับหน่วยความจำ LLAMA.CPP เรียกใช้งานได้จากนั้นจะเปิดสคริปต์เชลล์อีกครั้งเป็นไฟล์และเรียก MMAP () อีกครั้งเพื่อดึงน้ำหนักลงในหน่วยความจำและทำให้สามารถเข้าถึงได้โดยตรงทั้ง CPU และ GPU
เคล็ดลับในการฝังน้ำหนักภายใน llama.cpp executables คือเพื่อให้แน่ใจว่าไฟล์ท้องถิ่นจะถูกจัดแนวบนขอบเขตขนาดหน้า ด้วยวิธีนี้สมมติว่าไฟล์ zip จะไม่บีบอัดเมื่อมันเป็น mmap () ลงในหน่วยความจำเราสามารถส่งพอยน์เตอร์โดยตรงไปยัง GPU เช่น Apple Metal ซึ่งต้องการให้ข้อมูลขนาดหน้าจัดเรียง เนื่องจากไม่มีเครื่องมือเก็บถาวร ZIP ที่มีอยู่มีธงการจัดตำแหน่งเราจึงต้องเขียนรหัสประมาณ 500 บรรทัดเพื่อแทรกไฟล์ ZIP ด้วยตัวเอง อย่างไรก็ตามเมื่อถึงที่นั่นโปรแกรม ZIP ที่มีอยู่ทุกรายการควรจะสามารถอ่านได้หากพวกเขาสนับสนุน ZIP64 สิ่งนี้ทำให้น้ำหนักเข้าถึงได้ง่ายกว่าที่ควรจะเป็นหากเราคิดค้นรูปแบบไฟล์ของเราเองสำหรับไฟล์ที่ต่อกัน
ใน Microprocessors Intel และ AMD, Llama.cpp ใช้เวลาส่วนใหญ่ใน Matmul Quants ซึ่งมักจะเขียนสามครั้งสำหรับ SSSE3, AVX และ AVX2 LlamaFile ดึงฟังก์ชั่นเหล่านี้ออกเป็นไฟล์แยกต่างหากที่สามารถ #include
ed หลายครั้งโดยมีการเปลี่ยนแปลง __attribute__((__target__("arch")))
แอตทริบิวต์ฟังก์ชั่น จากนั้นจะมีการเพิ่มฟังก์ชั่น wrapper ซึ่งใช้คุณลักษณะ X86_HAVE(FOO)
ของ Cosmopolitan เพื่อส่งไปยังการใช้งานที่เหมาะสม
LlamaFile แก้การพกพาสถาปัตยกรรมโดยการสร้าง llama.cpp สองครั้ง: ครั้งเดียวสำหรับ AMD64 และอีกครั้งสำหรับ ARM64 จากนั้นจะห่อด้วยสคริปต์เชลล์ซึ่งมีคำนำหน้า MZ บน Windows มันจะทำงานเป็นไบนารีดั้งเดิม บน Linux มันจะสกัดตัวโหลด 8KB ขนาดเล็กที่เรียกว่า Ape Loader ถึง ${TMPDIR:-${HOME:-.}}/.ape
ที่จะแมปส่วนไบนารีของเชลล์สคริปต์ลงในหน่วยความจำ เป็นไปได้ที่จะหลีกเลี่ยงกระบวนการนี้โดยเรียกใช้โปรแกรม assimilate
ที่มาพร้อมกับคอมไพเลอร์ cosmocc
สิ่งที่โปรแกรม assimilate
ทำคือการเปลี่ยนการทำงานของเชลล์สคริปต์ให้เป็นรูปแบบการปฏิบัติการดั้งเดิมของแพลตฟอร์มโฮสต์ สิ่งนี้รับประกันได้ว่าจะมีเส้นทางทางเลือกสำหรับกระบวนการปล่อยแบบดั้งเดิมเมื่อจำเป็น
Cosmopolitan LIBC ใช้การเชื่อมโยงแบบคงที่เนื่องจากเป็นวิธีเดียวที่จะได้รับการดำเนินการเดียวกันเพื่อทำงานในหก OSE สิ่งนี้นำเสนอความท้าทายสำหรับ llama.cpp เพราะมันเป็นไปไม่ได้ที่จะเชื่อมโยงการสนับสนุน GPU แบบคงที่ วิธีที่เราแก้ปัญหานั้นคือการตรวจสอบว่ามีการติดตั้งคอมไพเลอร์บนระบบโฮสต์หรือไม่ สำหรับ Apple นั่นจะเป็น Xcode และสำหรับแพลตฟอร์มอื่น ๆ นั่นจะเป็น nvcc
LLAMA.CPP มีการใช้งานไฟล์เดียวของแต่ละโมดูล GPU ชื่อ ggml-metal.m
(Objective C) และ ggml-cuda.cu
(NVIDIA C) LlamaFile ฝังไฟล์ต้นฉบับเหล่านั้นไว้ใน zip archive และขอให้คอมไพเลอร์แพลตฟอร์มสร้างไฟล์เหล่านั้นในรันไทม์โดยกำหนดเป้าหมายไปที่ Microarchitecture GPU ดั้งเดิม หากใช้งานได้มันจะเชื่อมโยงกับการใช้งาน Platform C Library dlopen () ดู llamafile/cuda.c และ llamafile/metal.c
ในการใช้ฟังก์ชั่น Dlopen () เฉพาะแพลตฟอร์มเราจำเป็นต้องขอให้คอมไพเลอร์เฉพาะแพลตฟอร์มเพื่อสร้างปฏิบัติการขนาดเล็กที่แสดงอินเทอร์เฟซเหล่านี้ บนแพลตฟอร์มเอลฟ์ LIBC Cosmopolitan แมปผู้ช่วยนี้สามารถทำงานในหน่วยความจำพร้อมกับล่าม ELF ของแพลตฟอร์ม ห้องสมุดแพลตฟอร์ม C จะดูแลการเชื่อมโยงไลบรารี GPU ทั้งหมดจากนั้นเรียกใช้โปรแกรม Helper ซึ่ง Longjmp () กลับเข้าสู่สากล โปรแกรมปฏิบัติการนี้อยู่ในสถานะไฮบริดแปลก ๆ ที่มีห้องสมุด C แยกกันสองตัวซึ่งมี ABIs ที่แตกต่างกัน ตัวอย่างเช่น Thread Local Storage ทำงานแตกต่างกันในแต่ละระบบปฏิบัติการและโปรแกรมจะผิดพลาดหากการลงทะเบียน TLS ไม่ได้ชี้ไปที่หน่วยความจำที่เหมาะสม วิธีที่ Cosmopolitan LIBC แก้ปัญหาได้ว่าใน AMD คือการใช้ SSE เพื่อคอมไพล์การทำงานที่สามารถใช้งานได้ในเวลาทำงานเพื่อเปลี่ยนการลงทะเบียน %fs
เป็น %gs
ซึ่งใช้เวลาหนึ่งมิลลิวินาที ON ARM COSMO ใช้ x28
register สำหรับ TLS ซึ่งสามารถทำให้ปลอดภัยได้โดยการผ่านสถานะ -ffixed-x28
เมื่อรวบรวมโมดูล GPU สุดท้าย LlamaFile ใช้แอตทริบิวต์ __ms_abi__
เพื่อให้พอยน์เตอร์ฟังก์ชั่นที่ผ่านระหว่างแอปพลิเคชันและโมดูล GPU สอดคล้องกับการประชุมการเรียก Windows น่าประหลาดใจที่คอมไพเลอร์ทุกตัวที่เราทดสอบรวมถึง NVCC บน Linux และแม้กระทั่ง Objective-C บน MacOS ทั้งหมดรองรับฟังก์ชั่นสไตล์ Win32 ดังนั้นจึงทำให้มั่นใจได้ว่า llamafile ของคุณจะสามารถพูดคุยกับไดรเวอร์ Windows เมื่อทำงานบน Windows โดยไม่จำเป็นต้องเป็น คอมไพล์ใหม่เป็นไฟล์แยกต่างหากสำหรับ Windows ดู Cosmopolitan/dlopen.c สำหรับรายละเอียดเพิ่มเติม
ตัวอย่าง llamafiles ที่ให้ไว้ข้างต้นไม่ควรตีความว่าเป็นการรับรองหรือคำแนะนำของโมเดลเฉพาะใบอนุญาตหรือชุดข้อมูลในส่วนของ Mozilla
LlamaFile เพิ่มการจำนำ () และ Seccomp Sandboxing ให้กับ llama.cpp สิ่งนี้เปิดใช้งานโดยค่าเริ่มต้น มันสามารถปิดได้โดยผ่านธง --unsecure
Sandboxing ได้รับการสนับสนุนเฉพาะใน Linux และ OpenBSD บนระบบที่ไม่มี GPU; บนแพลตฟอร์มอื่น ๆ มันจะบันทึกคำเตือน
แนวทางการรักษาความปลอดภัยของเรามีประโยชน์เหล่านี้:
หลังจากเริ่มต้นขึ้นเซิร์ฟเวอร์ HTTP ของคุณไม่สามารถเข้าถึงระบบไฟล์ได้เลย นี่เป็นสิ่งที่ดีเพราะมันหมายความว่าหากมีคนค้นพบข้อผิดพลาดในเซิร์ฟเวอร์ llama.cpp ดังนั้นจึงมีโอกาสน้อยที่พวกเขาจะสามารถเข้าถึงข้อมูลที่ละเอียดอ่อนบนเครื่องของคุณหรือทำการเปลี่ยนแปลงการกำหนดค่า บน Linux เราสามารถทำสิ่งต่าง ๆ ได้ไกลยิ่งขึ้น ระบบที่เกี่ยวข้องกับเครือข่ายเดียวที่เรียกว่าเซิร์ฟเวอร์ HTTP จะได้รับอนุญาตให้ใช้หลังจากเริ่มต้นขึ้นคือยอมรับ () นั่นเป็นการจำกัดความสามารถของผู้โจมตีในการขัดข้อมูลข้อมูลในกรณีที่เซิร์ฟเวอร์ HTTP ของคุณถูกบุกรุก
คำสั่งหลัก CLI จะไม่สามารถเข้าถึงเครือข่ายได้เลย สิ่งนี้ถูกบังคับใช้โดยเคอร์เนลระบบปฏิบัติการ นอกจากนี้ยังไม่สามารถเขียนลงในระบบไฟล์ได้ สิ่งนี้จะช่วยให้คอมพิวเตอร์ของคุณปลอดภัยในกรณีที่มีการค้นพบข้อผิดพลาดในรูปแบบไฟล์ GGUF ที่ให้ไฟล์น้ำหนักที่เป็นอันตรายของผู้โจมตีและโพสต์ออนไลน์ ข้อยกเว้นเดียวสำหรับกฎนี้คือถ้าคุณผ่าน --prompt-cache
flag โดยไม่ระบุ --prompt-cache-ro
ในกรณีนี้ความปลอดภัยในปัจจุบันจะต้องอ่อนแอลงเพื่อให้สามารถเข้าถึง cpath
และ wpath
ได้ แต่การเข้าถึงเครือข่ายจะยังคงเป็นสิ่งต้องห้าม
ดังนั้น Llamafile ของคุณจึงสามารถป้องกันตัวเองจากโลกภายนอกได้ แต่นั่นไม่ได้หมายความว่าคุณได้รับการปกป้องจาก Llamafile Sandboxing เป็นตัวเอง หากคุณได้รับ llamafile ของคุณจากแหล่งที่ไม่น่าเชื่อถือผู้เขียนสามารถแก้ไขได้ง่ายๆเพื่อไม่ทำเช่นนั้น ในกรณีนี้คุณสามารถเรียกใช้ llamafile ที่ไม่น่าเชื่อถือภายในกล่องทรายอื่นเช่นเครื่องเสมือนเพื่อให้แน่ใจว่ามันทำงานตามที่คุณคาดหวัง
ในขณะที่โครงการ LlamaFile นั้นได้รับอนุญาตจาก Apache 2.0 การเปลี่ยนแปลงของเราต่อ llama.cpp ของเราได้รับใบอนุญาตภายใต้ MIT (เช่นเดียวกับโครงการ llama.cpp เอง) เพื่อให้เข้ากันได้และสามารถอยู่ได้ในอนาคต
โลโก้ LlamaFile ในหน้านี้ถูกสร้างขึ้นด้วยความช่วยเหลือของ Dall · E 3