ก้าวข้ามข้อจำกัดด้านฮาร์ดแวร์: ONNX Runtime GenAI เปิดตัวกระบวนทัศน์ใหม่สำหรับการอนุมาน LLM บน CPU ในเครื่อง

ก้าวข้ามข้อจำกัดด้านฮาร์ดแวร์: ONNX Runtime GenAI เปิดตัวกระบวนทัศน์ใหม่สำหรับการอนุมาน LLM บน CPU ในเครื่อง

บางครั้งโมเดลขนาดเล็กก็เพียงพอแล้ว และคุณไม่จำเป็นต้องใช้ GPU เสมอไป มีเหตุผลหลายประการที่ควรรันงานประเภท “เครื่องมือ” บน CPU โดยตรง: บางครั้งคุณก็ไม่มี GPU หรือคุณต้องการให้ข้อมูลคงอยู่ภายในเครื่อง หรือคุณแค่ต้องการให้โครงสร้างเรียบง่าย

นี่คือจุดที่ ONNX Runtime GenAI เข้ามามีบทบาท มันช่วยให้คุณรันโมเดลได้ทุกที่ที่ต้องการ: ใช้ GPU ถ้ามี หรือรันบน CPU ถ้าไม่มี และไม่ต้องเปลี่ยนโค้ดแม้แต่บรรทัดเดียว บทความนี้จะแสดงให้เห็นว่ามันทำงานอย่างไร โค้ดตัวอย่างทั้งหมดอยู่ในที่เก็บ onnx-inference

เริ่มต้นจากที่ไหน: โมเดล ML ที่พกพาได้

ทุกอย่างเริ่มต้นในเดือนกันยายน 2017 ผู้นำในอุตสาหกรรมตระหนักว่าความแตกแยกของเครื่องมือ ML กำลังสร้างความเสียหายให้กับทุกฝ่าย จึงได้เปิดตัว ONNX เป็นมาตรฐานร่วม ข้อเสนอของมันเรียบง่าย: ให้ “ตัวแปลสากล” สำหรับโมเดล คุณสามารถฝึกฝนในเฟรมเวิร์กที่คุณชอบ ส่งออกเป็นมาตรฐานสากล แล้วรันโมเดลนั้นอย่างมีประสิทธิภาพบนฮาร์ดแวร์เป้าหมายที่หลากหลาย

อุตสาหกรรมตอบสนองอย่างรวดเร็ว ภายในสิ้นปีนั้น มีบริษัทเข้าร่วมมากขึ้น ในปี 2018 Microsoft ได้เปิดตัว ONNX Runtime เป็นโอเพ่นซอร์ส ซึ่งเป็นเครื่องยนต์ที่ออกแบบมาเพื่อ “รัน” โมเดลเหล่านี้อย่างมีประสิทธิภาพบนฮาร์ดแวร์ใดๆ ในปี 2019 มันได้รับการอัปเกรดเป็นโครงการ Linux Foundation AI ซึ่งยืนยันสถานะของมันในฐานะมาตรฐานเปิด

มุ่งหน้าไปทางไหน: LLM ที่พกพาได้

เมื่อ LLM ระเบิดขึ้นประมาณปี 2023 ONNX ก็เผชิญกับความท้าทายใหม่ โมเดลดั้งเดิมนั้นไม่มีสถานะ: อินพุตเข้าไป ทำนายเอาต์พุตออกมา แต่ LLM นั้นแตกต่างออกไป — พวกมัน “พูดคุย” มีความจำ สร้างข้อความทีละโทเค็น และต้องการการจัดการ “KV cache” เพื่อจดจำบริบทการสนทนา

ONNX runtimes มาตรฐานไม่ได้ถูกสร้างมาสำหรับการวนซ้ำแบบนี้

ดังนั้นในปี 2024 ชุมชนจึงได้ปล่อย onnxruntime-genai ออกมา มันห่อหุ้มตรรกะเฉพาะที่ LLM ต้องการไว้รอบๆ runtime หลัก: การแปลงเป็นโทเค็น, การวนซ้ำการสร้าง, กลยุทธ์การค้นหา เช่น beam search และการจัดการสถานะ

ก้าวไปข้างหน้าถึงปี 2026 ตอนนี้เรามีคลังโมเดล ONNX ที่ถูกควอนไทซ์ล่วงหน้าบน Hugging Face แล้ว คุณสามารถนำไปใช้ได้ทันทีโดยไม่ต้องฝึกฝนหรือแปลงรูปแบบ

การใช้คลังนี้

ประโยชน์ของ onnxruntime-genai คือมันจัดการตรรกะการสร้างให้คุณ หากใช้ ONNX Runtime ดั้งเดิม คุณต้องเขียนลูปด้วยตัวเองเพื่อป้อนโทเค็นเอาต์พุตกลับไปเป็นอินพุต

ตอนนี้ดูเหมือนจะเป็นแบบนี้:

python
import onnxruntime_genai as og

โหลดโมเดล (เส้นทางนี้ใช้งานได้กับ CPU, GPU หรือมือถือโดยอัตโนมัติ)

model = og.Model(‘path/to/model’)
tokenizer = og.Tokenizer(model)

กำหนดค่าว่าคุณต้องการค้นหาอย่างไร

params = og.GeneratorParams(model)
params.set_search_options(max_length=256, batch_size=1)

ลูปการสร้าง

generator = og.Generator(model, params)
generator.append_tokens(tokenizer.encode(prompt))
while True:
generator.generate_next_token()
if generator.is_done():
break

# ถอดรหัสและพิมพ์ไปเรื่อยๆ
token = generator.get_next_tokens()[0]
print(tokenizer.decode(token), end='', flush=True)

มันทำงานหนักมากเบื้องหลัง: จัดการ KV cache, ใช้กลยุทธ์การค้นหาของคุณ (greedy, top-p ฯลฯ) และกำหนดเส้นทางโอเปอเรเตอร์ไปยังฮาร์ดแวร์ที่ดีที่สุดที่มี (CUDA, CoreML หรือ CPU)

ฮาร์ดแวร์ โมเดล และการควอนไทเซชัน

ตั้งแต่ยุคแรกๆ ของ LLM มีหลายอย่างที่เปลี่ยนแปลงไป โปรเซสเซอร์เร็วขึ้น โมเดลมีความสามารถที่น่าประหลาดใจแม้จะมีขนาดเล็กลง

และยังมีเรื่อง “การควอนไทเซชัน” เราไม่จำกัดอยู่แค่การรันโมเดลด้วยความแม่นยำ 32 บิตเต็มอีกต่อไป เทคนิคเช่น INT4 quantization สามารถบีบอัดน้ำหนักได้อย่างมาก โดยมีผลกระทบต่อความแม่นยำน้อยกว่าที่คาดไว้อย่างน่าประหลาดใจ

ฉันได้ทดสอบโมเดลหลายตัวด้วย onnx-inference สิ่งที่ควรทราบคือ โมเดลเล็กๆ เหล่านี้เข้าใจโครงสร้างได้ดี แต่ไม่เหมาะสำหรับงานที่ต้องใช้ความรู้เข้มข้น

สำหรับงานที่ง่ายมาก คุณสามารถใช้โมเดลเล็กๆ เช่น SmolLM2–135M ได้ เหมาะสำหรับการเติมข้อความพื้นฐานหรือการจำแนกประเภท

สำหรับงานที่ซับซ้อนมากขึ้น คุณจะต้องการโมเดลที่ใหญ่กว่า Qwen 3–0.6B มีความสามารถเพิ่มขึ้นอย่างมากโดยมีพารามิเตอร์เพิ่มขึ้นเพียงไม่กี่ร้อยล้าน

เมื่อคุณพิจารณาโมเดลที่มีพารามิเตอร์เกิน 500 ล้านบน CPU คุณต้องชั่งน้ำหนักอย่างรอบคอบระหว่างหน้าต่างบริบทที่ยอมรับได้ จำนวนโทเค็นสูงสุดที่จะสร้าง และความล่าช้า

การสร้างเซิร์ฟเวอร์ที่พกพาได้

การห่อหุ้มตรรกะการอนุมานลงในเซิร์ฟเวอร์น้ำหนักเบาสามารถทำให้มันใช้งานได้ทั่วไป ไม่ว่าผู้เรียกจะใช้ภาษาอะไรก็สามารถเข้าถึงได้ง่าย รหัสในที่เก็บของฉันมีเซิร์ฟเวอร์ FastAPI ที่ทำสิ่งนี้

คลาสหลักคือ OnnxTextGenerator ซึ่งจัดการตรรกะการอนุมาน:

python
from inference import OnnxTextGenerator

ตรวจจับฮาร์ดแวร์อัตโนมัติ

generator = OnnxTextGenerator()

การรันแบบง่าย

result = generator.generate(
prompt=”Explain quantum computing like I’m five:”,
max_new_tokens=100,
temperature=0.7
)

print(result[‘generated_text’])

สำหรับแอปพลิเคชันแบบเรียลไทม์ คุณไม่สามารถรอคำตอบเต็มกลับมาได้ คุณสามารถใช้การสร้างแบบสตรีมแทน:

python
for chunk, metadata in generator.stream_generate(
prompt="Write a haiku about Docker:",
max_new_tokens=50,
temperature=0.8
):
print(chunk, end='', flush=True)

แต่ละฟังก์ชันจะถูกเปิดเผยเป็น FastAPI endpoint:

python
@app.post("/generate")
async def generate(request: GenerateRequest):
result = generator.generate(
prompt=request.prompt,
max_new_tokens=request.max_new_tokens,
temperature=request.temperature
)
return {
"generated_text": result["generated_text"],
"tokens_generated": result["tokens_generated"],
"finish_reason": result["finish_reason"]
}

ตัวเริ่มต้นจะค้นหา execution provider ฮาร์ดแวร์ที่ดีที่สุดโดยอัตโนมัติ เพื่อให้ “ใช้งานได้ทันที”: CUDA (NVIDIA GPU) → CoreML (Apple Silicon) → CPU (ทางเลือกสำรองทั่วไป)

กลยุทธ์การคอนเทนเนอร์ไรซ์

สำหรับโมเดลเล็กๆ แบบนี้ วิธีที่สะดวกคือการ “อบโมเดลลงในอิมเมจโดยตรง” วิธีนี้ทำให้พร้อมใช้งานหลังการปรับใช้โดยไม่ต้องรอการดาวน์โหลด

นี่คือ Dockerfile แบบย่อ:

dockerfile
FROM python:3.12-slim

COPY requirements.txt .
RUN pip install -r requirements.txt

ARG MODEL_ID=onnx-community/SmolLM2-135M-Instruct-ONNX
RUN hf download ${MODEL_ID} –local-dir /app/model

COPY . /app
WORKDIR /app

CMD [“uvicorn”, “app:app”, “–host”, “0.0.0.0”, “–port”, “8080”]

เมื่อโหลดคอนเทนเนอร์นี้ โมเดลจะอยู่บนดิสก์แล้ว สามารถเริ่มต้นได้ทันที และทำงานได้แม้ในสภาพแวดล้อมที่ไม่มีเครือข่าย

การทำให้เป็นแบบไม่มีเซิร์ฟเวอร์บน Google Cloud Run

Cloud Run เหมาะอย่างยิ่งสำหรับการปรับใช้แอปพลิเคชันที่ใช้โมเดลขนาดเล็ก มันสามารถปรับขนาดลงเป็นศูนย์เมื่อไม่ได้ใช้งาน ทำให้ไม่ต้องจ่ายสำหรับทรัพยากรที่ไม่ได้ใช้ เนื่องจากใช้ CPU จึงไม่จำเป็นต้องเตรียมอินสแตนซ์ GPU

ปรับใช้จากซอร์สโค้ด

สามารถปรับใช้จากซอร์สโค้ดได้โดยตรง คำสั่งต่อไปนี้ใช้ Google Cloud Build เพื่อสร้างคอนเทนเนอร์ และปรับใช้ไปยัง Cloud Run ในขั้นตอนเดียว

เราตั้งค่าพารามิเตอร์เฉพาะบางอย่างที่นี่: จัดสรร CPU 2 ตัว (การอนุมานเป็นงานที่ใช้การคำนวณหนัก) และหน่วยความจำ 4Gi (เพียงพอสำหรับโมเดลขนาดเล็กและ KV cache ของมัน) และตั้งค่าความพร้อมใช้งานพร้อมกันเป็น 4 เพื่อให้อินสแตนซ์สามารถจัดการคำขอพร้อมกันจำนวนเล็กน้อยได้โดยไม่ทำให้แคชสั่นสะเทือนอย่างรุนแรง

bash
gcloud run deploy onnx-inference
--allow-unauthenticated
--concurrency 4
--cpu 2
--labels dev-tutorial=onnx-inference
--memory 4Gi
--region us-central1
--source .

การทดสอบ

หลังจากปรับใช้เสร็จ ให้รับ URL ของบริการใหม่ และทดสอบด้วยคำสั่ง curl ง่ายๆ

bash
SERVICE_URL=$(gcloud run services describe onnx-inference
–region $REGION
–format ‘value(status.url)’)

curl -X POST “$SERVICE_URL/generate”
-H “Content-Type: application/json”
-d ‘{“prompt”: “Why is efficient AI important?”, “max_new_tokens”: 50}’

การแก้ไขปัญหา

ปัญหาบางอย่างที่คุณอาจพบ:

  • ขาดไฟล์ genai_config.json: ไม่ใช่ทุกโมเดล ONNX บน Hugging Face ที่มีไฟล์การกำหนดค่าที่จำเป็นสำหรับไลบรารี ONNX Runtime GenAI โค้ดตัวอย่างจะพยายามอนุมานการกำหนดค่าหากขาดหายไป แต่ควรใช้โมเดลที่มีการกำหนดค่านั้นมาด้วย
  • Execution providers: ตัวอย่างปัจจุบันรวม CUDA, CoreML และ CPU แต่สามารถเพิ่ม provider อื่นๆ ได้ง่าย เช่น TensorRT หรือ OpenVINO
  • การปรับแต่งพารามิเตอร์: เมื่อคุณเพิ่ม max_new_tokens KV cache จะใหญ่ขึ้น และการคำนวณของ attention mechanism ก็จะเพิ่มขึ้นด้วย ต้องระวังการใช้หน่วยความจำและความล่าช้าที่เปลี่ยนแปลงไป

สรุป

โมเดลขนาดเล็กก้าวหน้าไปมาก ด้วย ONNX Runtime GenAI และเทคนิคการควอนไทเซชันที่เหมาะสม ตอนนี้สามารถรัน LLM ที่มีความสามารถไม่ธรรมดาในสภาพแวดล้อมที่เมื่อไม่กี่ปีก่อนยังคิดไม่ถึง

สิ่งนี้เปิดประตูสู่แอปพลิเคชันประเภทใหม่ทั้งหมด: ผู้ช่วยส่วนตัวที่ความเป็นส่วนตัวสมบูรณ์ อุปกรณ์ Edge อัจฉริยะ และ API แบบไม่มีเซิร์ฟเวอร์ที่มีต้นทุนการบำรุงรักษาเกือบเป็นศูนย์

หากต้องการลอง คุณสามารถเริ่มต้นได้อย่างรวดเร็วในไม่กี่นาที คุณสามารถรับโค้ดได้จากที่เก็บ onnx-inference บน GitHub ดูเอกสารทางการของ ONNX Runtime GenAI สำหรับรายละเอียดเพิ่มเติม หรือเรียกดู Hugging Face ONNX Community เพื่อหาโมเดลที่เหมาะสม


ติดตาม “Whale Habitat” Mini Program เพื่อรับข่าวสาร AI ล่าสุด


⚠️ หมายเหตุ: เนื้อหาได้รับการแปลโดย AI และตรวจสอบโดยมนุษย์ หากมีข้อผิดพลาดโปรดแจ้ง

本文来自网络搜集,不代表คลื่นสร้างอนาคต立场,如有侵权,联系删除。转载请注明出处:https://www.itsolotime.com/th/archives/23012

Like (0)
Previous 2026年2月7日 am7:11
Next 2026年2月7日 am9:55

相关推荐