ประเด็นสำคัญ
- การรันแบบโลคอลต้องการ RAM หรือ VRAM เพียงพอสำหรับไฟล์ที่ควอนไทซ์แล้วและแคชบริบท
- Ollama เป็นจุดเริ่มต้นที่รวดเร็วที่สุด; llama.cpp ให้การควบคุมการควอนไทซ์และแฟลกได้มากกว่า
- ทั้งสองแบบเปิดเซิร์ฟเวอร์สไตล์ OpenAI ทำให้โค้ดไคลเอนต์ชุดเดียวกันสามารถชี้ไปยังแบบโลคอลหรือแบบโฮสต์ได้
- เอนด์พอยต์แบบโฮสต์มีค่าใช้จ่าย $0.15 ต่อ 1M โทเคนอินพุตและ $0.50 ต่อ 1M โทเคนเอาต์พุต และใช้เวลาไม่กี่นาทีในการตั้งค่า
ตัดสินใจก่อน: คุณมีฮาร์ดแวร์อะไรบ้าง?
หน่วยความจำคือตัวตัดสินทุกอย่าง โมเดลภาษาคือชุดตัวเลขขนาดใหญ่ และชุดตัวเลขทั้งหมดต้องอยู่ในหน่วยความจำเร็วขณะสร้างผลลัพธ์ การควอนไทซ์จะลดขนาดตัวเลขเหล่านั้น โมเดลที่ควอนไทซ์แบบ 4-bit ใช้พื้นที่ประมาณครึ่งไบต์ต่อพารามิเตอร์ ดังนั้นโมเดลที่มีพารามิเตอร์ 8 พันล้านตัวจะกินพื้นที่ประมาณ 5 GB และโมเดล 70 พันล้านตัวจะกินพื้นที่ประมาณ 40 GB ให้ถือว่าตัวเลขเหล่านี้เป็นค่าประมาณ เนื่องจากขนาดที่แท้จริงขึ้นอยู่กับรูปแบบการควอนไทซ์
นอกจากน้ำหนักโมเดลแล้ว คุณยังต้องการพื้นที่สำหรับแคชบริบท ซึ่งขยายตามความยาวของพรอมต์ ดังนั้นประวัติการจำลองบทบาทที่ยาวหรือเอกสารขนาดใหญ่จึงใช้หน่วยความจำมากกว่าคำถามสั้น ๆ ควรวางแผนสำหรับหน่วยความจำเพิ่มเติมอีกไม่กี่ GB ในบริบทระดับปานกลาง และมากขึ้นหากต้องการใช้พรอมต์ที่ยาว
- แล็ปท็อป 8 GB ไม่มี GPU: ใช้ได้เฉพาะโมเดลขนาดเล็กและผลลัพธ์ช้า
- Mac Apple Silicon ขนาด 16 ถึง 32 GB: โมเดลขนาดกลางทำงานได้ดีเพราะ CPU และ GPU ใช้หน่วยความจำร่วมกัน
- GPU ผู้บริโภคหนึ่งตัวที่มี VRAM 12 ถึง 24 GB: โมเดลขนาดกลางด้วยความเร็วที่ดี
- ขนาดใหญ่กว่านี้:ต้องใช้ GPU หลายตัวหรือเช่าเซิร์ฟเวอร์
วิธีที่ 1: Ollama ด้วยคำสั่งไม่กี่คำสั่ง
Ollama คือเส้นทางที่สั้นที่สุด มันดาวน์โหลดโมเดลที่ผ่านการควอนไทซ์ เริ่มเซิร์ฟเวอร์ในพื้นหลัง และให้พรอมต์แชท ติดตั้งจากเว็บไซต์ทางการสำหรับระบบปฏิบัติการของคุณ จากนั้นตรวจสอบว่าไลบรารีโมเดล Ollama แสดงแท็ก Dolphin รุ่นใดอยู่ เพราะชื่อและขนาดเปลี่ยนแปลงระหว่างการเผยแพร่
# replace <tag> with a Dolphin tag from the Ollama library
ollama pull <tag>
ollama run <tag>
คำสั่งแรกดาวน์โหลดไฟล์ซึ่งอาจใช้เวลานานบนการเชื่อมต่อที่ช้า คำสั่งที่สองเปิดแชทแบบโต้ตอบในเทอร์มินัล Ollama ยังให้บริการ HTTP API บนเครื่องของคุณ รวมถึงเส้นทางสไตล์ OpenAI ภายใต้ /v1 เพื่อให้โปรแกรมอื่นสามารถใช้งานได้
หากการสร้างข้อความช้ามาก โมเดลอาจไม่พอดีกับ VRAM และบางส่วนทำงานบน CPU ให้เลือกแท็กที่เล็กลงหรือการควอนไทซ์แบบบิตต่ำ
วิธีที่ 2: llama.cpp เพื่อการควบคุมที่มากขึ้น
llama.cpp คือเครื่องยนต์ C++ ที่เครื่องมืออื่นๆ อีกมากมายสร้างขึ้นมา คุณดาวน์โหลดไฟล์ GGUF ของโมเดล จากนั้นเริ่มเซิร์ฟเวอร์ของมัน ขั้นตอนเหล่านี้มากกว่า Ollama แต่ช่วยให้คุณตั้งค่าความยาวของหน้าต่างบริบท จำนวนเลเยอร์ที่วางบน GPU และการควอนไทซ์ที่ต้องการได้
# after building llama.cpp and downloading a GGUF file
llama-server -m ./model.gguf -c 8192 -ngl 99 --port 8080
ที่นี่ -c กำหนดความยาวของบริบท, -ngl กำหนดจำนวนเลเยอร์ที่จะส่งไปยัง GPU และ --port เลือกพอร์ต ตรวจสอบ README ของโปรเจกต์สำหรับตัวเลือกในเวอร์ชันของคุณเนื่องจากมีการเปลี่ยนแปลงอยู่เสมอ การใช้ -c ที่มากขึ้นจะใช้พื้นที่มากขึ้น ดังนั้นให้เพิ่มเฉพาะเมื่อคุณต้องการเท่านั้น
สำหรับการใช้งานแบบกราฟิก front ends เช่น Open WebUI สามารถเชื่อมต่อกับเซิร์ฟเวอร์ตัวใดก็ได้ บันทึกของเราเกี่ยวกับ endpoint API ของ Open WebUI แสดงวิธีเพิ่ม endpoint แบบกำหนดเอง
การเรียกใช้เซิร์ฟเวอร์ท้องถิ่นจากโค้ด
เครื่องมือทั้งสองรองรับรูปแบบแชทของ OpenAI ดังนั้นคุณจึงเขียนไคลเอนต์เพียงครั้งเดียวแล้วเปลี่ยนเป้าหมายด้วยการตั้งค่าสองค่า สคริปต์นี้จัดวางเป้าหมายทั้งสองไว้เคียงข้างกัน เวอร์ชันท้องถิ่นใช้พอร์ตที่ Ollama ใช้เป็นค่าเริ่มต้น; เปลี่ยนแปลงค่านี้หากคุณเริ่ม llama.cpp บนพอร์ต 8080
from openai import OpenAI
TARGETS = {
"local": {"base_url": "http://localhost:11434/v1", "key": "not-needed", "model": "your-local-tag"},
"hosted": {"base_url": "https://api.dolphinllm.com/v1", "key": "YOUR_KEY", "model": "uncensored"},
}
t = TARGETS["hosted"]
client = OpenAI(base_url=t["base_url"], api_key=t["key"])
resp = client.chat.completions.create(
model=t["model"],
messages=[{"role": "user", "content": "Summarize what a GGUF file is."}],
)
print(resp.choices[0].message.content)
เซิร์ฟเวอร์ท้องถิ่นมักละเว้นคีย์ แต่ SDK ต้องการสตริงไม่ว่าง ชื่อโมเดลสำหรับเซิร์ฟเวอร์ท้องถิ่นคือแท็กหรือ alias ที่คุณโหลด ส่วน hosted model ID คือ uncensored
วิธีที่ 3: ข้ามการตั้งค่าและใช้เอนด์พอยต์แบบโฮสต์
หากการคำนวณฮาร์ดแวร์ดูไม่ดี หรือคุณต้องการพฤติกรรมเดียวกันในทุกเครื่อง hosted endpoint จะใช้งานง่ายกว่า บริการนี้ให้โมเดล open-weight หนึ่งตัว ซึ่งรันโดยผู้ให้บริการอิสระและปรับแต่งเพื่อตอบคำถามโดยไม่มีการปฏิเสธเนื้อหาสำหรับการใช้งานผู้ใหญ่ที่ถูกต้องตามกฎหมาย นี่ไม่ใช่ API ทางการของผู้ขายโมเดลใด ๆ และไม่สามารถเลือกโมเดลอื่นได้ สิ่งที่คุณได้รับคือ URL ที่เสถียร คีย์ และการเรียกเก็บเงินตามโทเคน
ขั้นตอนสั้นมาก ลงทะเบียนด้วย Google หรืออีเมลและรหัสผ่าน เปิด หน้าคีย์ API และรับเครดิตทดลองใช้ $0.50 ด้วยคลิกเดียว ไม่ต้องใช้บัตรเครดิต ใช้ได้เป็นเวลา 7 วัน และจำกัดเพียงหนึ่งต่อคน จากนั้นรันสคริปต์ Python ด้านบนโดยกำหนดเป้าหมายเป็นแบบโฮสต์ หากต้องการใช้ curl:
curl https://api.dolphinllm.com/v1/chat/completions -H "Authorization: Bearer YOUR_KEY" -H "Content-Type: application/json" -d '{"model":"uncensored","messages":[{"role":"user","content":"Hello"}],"stream":false}'
หน้าต่างบริบทมีขนาด 100,000 โทเคน ซึ่งมากกว่าที่แล็ปท็อปส่วนใหญ่จะรองรับในแคชได้อย่างสะดวก พรอมต์ไม่ถูกใช้ในการฝึกฝน
เปรียบเทียบต้นทุนและความพยายาม
แบบท้องถิ่นดูเหมือนฟรี แต่ไม่ใช่ คุณต้องจ่ายค่าฮาร์ดแวร์ ค่าไฟฟ้า และเวลาของคุณเอง แบบโฮสต์คิดค่าใช้จ่ายต่อคำขอ แต่ตัวเลขมีขนาดเล็ก ที่ $0.15 ต่อ 1M โทเคนอินพุต และ $0.50 ต่อ 1M โทเคนเอาต์พุต ค่าใช้จ่ายต่อรอบแชทที่มี 3,000 โทเคนอินพุตและ 700 โทเคนเอาต์พุตคือ:
- อินพุต: 3,000 x $0.15 / 1,000,000 = $0.00045
- เอาต์พุต: 700 x $0.50 / 1,000,000 = $0.00035
- รวม: $0.0008 ต่อรอบ ดังนั้น $0.80 ต่อ 1,000 รอบ
แม้ผู้ใช้หนักที่ส่ง 5,000 รอบเช่นนี้ในเดือนเดียวก็ใช้จ่ายเพียงประมาณ $4 เท่านั้น GPU ที่ราคาหลายร้อยดอลลาร์ต้องใช้เวลานานหลายปีก่อนที่จะคุ้มทุนกับปริมาณนี้ การเปรียบเทียบจะเปลี่ยนไปเมื่อคุณมีปริมาณการใช้งานสูงอย่างต่อเนื่อง ต้องการ fine-tune เฉพาะ หรือไม่สามารถส่งข้อมูลออกจากเครื่องของคุณได้
รายละเอียดราคาเต็ม รวมถึงโบนัสการเติมเงิน +5%, +10% และ +15% มีอยู่ใน หน้าราคา และ เอกสารประกอบ ครอบคลุมขีดจำกัดและพารามิเตอร์
กฎง่ายๆ ในการเลือก
รันในเครื่องหากคุณต้องการทดลองกับ fine-tunes หลายตัว ทำงานออฟไลน์ หรือเก็บทุก prompt บนดิสก์ของคุณเอง ใช้ hosted endpoint หากคุณกำลังสร้างแอปพลิเคชันที่ผู้อื่นจะใช้ หากฮาร์ดแวร์ของคุณมีจำกัด หรือหากคุณต้องการหน้าต่างบริบท 100,000 โทเคนที่ยาวนานโดยไม่ต้องจัดการหน่วยความจำ นักพัฒนาหลายคนใช้ทั้งสองอย่าง: โมเดลในเครื่องสำหรับการทดลองส่วนตัว และ hosted endpoint สำหรับสิ่งที่ต้องทำงานต่อเนื่อง เนื่องจากโค้ดไคลเอนต์เหมือนกัน การเปลี่ยนจึงใช้เวลาเพียงบรรทัดเดียว

