EIE: Máy chủ suy luận cục bộ hỗ trợ TurboQuant, nhóm mô hình và đa GPU

08 tháng 4, 2026·6 phút đọc

EIE (Elyne Inference Engine) là một giải pháp thay thế Ollama mới, được thiết kế để chạy nhiều mô hình LLM song song với hiệu suất cao. Công cụ này tích hợp sẵn TurboQuant để nén bộ nhớ, hỗ trợ cả NVIDIA và AMD GPU, cùng khả năng quản lý tài nguyên linh hoạt qua các nhóm mô hình.

EIE: Máy chủ suy luận cục bộ hỗ trợ TurboQuant, nhóm mô hình và đa GPU

EIE: Máy chủ suy luận cục bộ hỗ trợ TurboQuant, nhóm mô hình và đa GPU

Trong bối cảnh các mô hình ngôn ngữ lớn (LLM) ngày càng phổ biến, nhu cầu chạy nhiều mô hình đồng thời trên cùng một hệ thống đang trở nên cấp thiết. Tôi đã xây dựng một kiến trúc đa mô hình, nơi 3 LLM nhận cùng một lời nhắc, thảo luận và đưa ra một phản hồi đồng thuận (giống như một hệ thống bỏ phiếu để loại bỏ thiên kiến cá nhân). Tuy nhiên, các công cụ hiện tại như Ollama chỉ đổi mô hình tuần tự, vLLM thiên về đám mây, và llama.cpp server chỉ xử lý một mô hình tại một thời điểm. Không công cụ nào đáp ứng được nhu cầu tải 3+ mô hình cùng lúc, gửi lời nhắc song song và xử lý lỗi một cách graceful.

Chính vì vậy, tôi đã xây dựng EIE.

EIE là gì?

EIE (Elyne Inference Engine) là một máy chủ suy luận cục bộ dành cho các mô hình định dạng GGUF. Nó tải các mô hình, phục vụ chúng thông qua REST API tương thích với OpenAI và quản lý bộ nhớ GPU.

EIE tập trung vào một việc duy nhất: phục vụ hoàn thành văn bản (completions). Không có tác nhân (agents), không có RAG, không có giao diện người dùng. Mọi thứ khác chạy ở lớp trên cùng.

Nhóm mô hình (Model Groups)

Đây là ý tưởng cốt lõi của EIE. Thay vì nghĩ về từng mô hình riêng lẻ, EIE quản lý chúng theo nhóm:

groups:
  - name: core
    models: [mistral-7b, granite-3b, exaone-2.4b]
    required_responses: 3
    type: parallel
    pinned: true
    fallback: partial

EIE hỗ trợ ba mẫu thực thi:

  • Parallel (Song song): Gửi cùng lời nhắc đến N mô hình cùng lúc, trả về tất cả phản hồi.
  • Sequential (Tuần tự): Đầu ra của mô hình A trở thành đầu vào của mô hình B (ví dụ: pipeline thị giác -> ngôn ngữ).
  • Fan-out: Gửi cùng lời nhắc đến N mô hình và chọn phản hồi tốt nhất.

Bạn có thể thực thi một nhóm thông qua lệnh curl:

curl http://localhost:8080/v1/batch/execute \
  -H "Content-Type: application/json" \
  -d '{
    "group": "core",
    "messages": [{"role": "user", "content": "Phân tích cảnh báo này"}]
  }'

Động cơ chính sách (Policy Engine)

Hành vi lập lịch không được mã hóa cứng mà được điều khiển bởi các chiến lược có thể cắm (pluggable strategies):

  • generic: Tải theo yêu cầu, loại bỏ LRU. Thay thế trực tiếp cho Ollama.
  • pinned-group: N mô hình được tải cố định, yêu cầu phản hồi đa kênh. Dành cho suy luận đa mô hình.
  • multi-group: Nhiều nhóm được ghim với quy tắc riêng. Kiến trúc lõi kép (2×3 LLM).
  • fixed-appliance: Tải sẵn khi khởi động, không tải động. Dành cho thiết bị biên.

Các chiến lược tùy chỉnh có thể được tải từ thư viện dùng chung mà không cần biên dịch lại:

policy:
  strategy: plugin:libmystrategy.so

Chiến lược dự phòng (Fallback)

Nếu một mô hình trong nhóm thất bại hoặc hết thời gian chờ:

  • strict: Toàn bộ yêu cầu thất bại (mặc định).
  • partial: Trả về những gì đã hoàn thành, đánh dấu là chưa hoàn chỉnh.
  • retry_once: Thử lại mô hình thất bại, sau đó chuyển sang partial.
  • replace_with: Hoán đổi một mô hình dự phòng và tiếp tục.

Điều này cực kỳ quan trọng trong môi trường sản xuất: một mô hình chậm không nên làm gián đoạn toàn bộ quy trình của bạn.

Hỗ trợ TurboQuant nguyên bản

TurboQuant (Google Research, ICLR 2026) nén bộ nhớ đệm KV (KV cache) xuống chỉ còn 3 bit mỗi giá trị bằng cách sử dụng biến đổi Walsh-Hadamard + lượng tử hóa Lloyd-Max. Điều này mang lại mức nén ~5 lần với sự giảm chất lượng tối thiểu.

EIE hỗ trợ TurboQuant như một tùy chọn hạng nhất:

  • f16: Không nén, dùng để debug/baseline.
  • q8_0: Nén ~2 lần, dành cho mô hình nhạy cảm.
  • turbo4: Nén ~4 lần, ưu tiên chất lượng.
  • turbo3: Nén ~5 lần, mặc định cho sản xuất.
  • turbo2: Nén ~6.4 lần, dành cho áp lực bộ nhớ cực cao.

Điểm thú vị là KV thích ứng (adaptive KV). Nếu kiểm tra sức khỏe phát hiện mô hình đang chịu áp lực bộ nhớ (độ trễ tăng), Động cơ chính sách có thể hạ cấp từ turbo3 xuống turbo2 ngay lúc chạy mà không cần tải lại mô hình.

inference:
  kv_cache:
    mode: auto  # chọn định dạng tốt nhất dựa trên VRAM khả dụng

Chất lượng dịch vụ VRAM

Quản lý bộ nhớ rõ ràng với ngân sách cho từng nhóm:

vram:
  reserve_mb: 512
  low_watermark: 85    # bắt đầu loại bỏ mô hình không được ghim
  critical_watermark: 95  # ép buộc loại bỏ
  group_isolation: true

CUDA + ROCm từ cùng một mã nguồn

Chỉ một cờ xây dựng (build flag) là thay đổi phần phụ trợ GPU:

cmake -B build -DGGML_CUDA=ON  # NVIDIA
cmake -B build -DGGML_HIP=ON   # AMD
cmake -B build                 # CPU fallback

Phần phụ trợ được tự động phát hiện tại thời điểm chạy. Toàn bộ động cơ nằm trên lớp phụ trợ hoàn toàn không phụ thuộc vào GPU. AMD ROCm là mục tiêu hạng nhất, không phải là tính năng thêm vào sau. Với các triển khai thiết bị, một chiếc AMD Radeon PRO W7900 (48 GB) với chi phí thấp hơn nhiều so với A100 sẽ làm cho việc phục vụ đa mô hình trở nên rất thực tế.

Ví dụ ngân sách VRAM

Với TurboQuant turbo3, trọng số Q4_K_M, bối cảnh 4096:

  • Nhóm 3 mô hình trên RTX 4090 16 GB → ~7.7 GB dùng, 8.3 GB trống.
  • Lõi kép 6 mô hình trên AMD W7900 48 GB → ~16 GB dùng, 32 GB trống.
  • 6 LLM + thị giác trên AMD W7900 48 GB → ~18 GB dùng, 30 GB trống.

Nếu không có TurboQuant, thiết lập 3 mô hình sẽ cần ~9.2 GB — đây là sự khác biệt giữa việc hoạt động thoải mái và hoạt động quá tải.

So sánh với các công cụ khác

  • Ollama: Không có lập lịch, không có nhóm, không có TurboQuant, chỉ đổi mô hình tuần tự.
  • vLLM: Thiên về đám mây, không có TurboQuant, không có động cơ chính sách, không có nhóm mô hình.
  • llama.cpp server: Chỉ một mô hình, không có lập lịch, không có VRAM QoS, không có dự phòng.

Bắt đầu với EIE

Bạn có thể bắt đầu sử dụng EIE ngay với các lệnh sau:

git clone https://github.com/deharoalexandre-cyber/EIE.git
cd EIE && git submodule update --init
./scripts/build-cuda.sh
./build/eie-server --config presets/generic.yaml

API tiêu chuẩn của OpenAI sẽ chạy trên localhost:8080. Bất kỳ khách hàng hiện có nào cũng hoạt động mà không cần sửa đổi.

Các bước tiếp theo

Dự án đang phát triển và các bước tiếp theo bao gồm:

  • Kết nối vòng lặp suy luận thực của llama.cpp (các phần giữ chỗ đang ở cpu_backend.cpp).
  • Xác thực TurboQuant trên AMD ROCm.
  • Phân tích cú pháp yêu cầu JSON cho các tuyến API.
  • Các chiến lược lập lịch từ cộng đồng trong contrib/.

Liên kết:

Mọi đóng góp ý kiến đều được hoan nghênh — đặc biệt là từ bất kỳ ai đang chạy thiết lập đa mô hình hoặc đang làm việc với TurboQuant trên ROCm.

Bài viết được tổng hợp và biên soạn bằng AI từ các nguồn tin tức công nghệ. Nội dung mang tính tham khảo. Xem bài gốc ↗