
Tổng quan
glm53-flash-offload cung cấp bản dựng GLM-5.3-Flash 125,3 GB, EXL3 3,05-bpw trên một GPU NVIDIA 24 GB duy nhất cùng bộ nhớ DDR4 của máy chủ. Dự án cung cấp API HTTP tương thích OpenAI, đồng thời lưu phần lớn trọng số mixture-of-experts được định tuyến của mô hình trong RAM hệ thống đã ghim.
Đây là một tập hợp monkey patch mỏng trên exllamav3 1.5.1 nguyên bản, được bổ sung bằng một số kernel tùy chỉnh nhỏ. Dự án không yêu cầu chỉnh sửa mã nguồn exllamav3. Cấu hình được ghi nhận đã được đo trên RTX 3090 kết nối qua PCIe 4.0 x16 với hệ thống AMD EPYC 7443P.
Ý tưởng cốt lõi là giữ các expert thường được sử dụng trong bộ nhớ đệm GPU co giãn. Các expert không có trong bộ nhớ đệm có thể được đọc trực tiếp từ bộ nhớ máy chủ đã ghim qua PCIe. Ở chế độ nhanh, các lần bỏ lỡ bộ nhớ đệm lạnh nhất trong quá trình giải mã có thể được xử lý thay bằng worker CPU AVX2.
Tính năng chính
- Triển khai trên một GPU: cung cấp GLM-5.3-Flash bằng một GPU RTX 3090-class 24 GB.
- API tương thích OpenAI: hỗ trợ chat completions, text completions, khám phá mô hình, streaming, nội dung suy luận và tool call kiểu OpenAI.
- Lưu trữ zero-copy đã ghim: tất cả expert được định tuyến đều nằm trong RAM máy chủ đã ghim và có thể được truy cập qua địa chỉ hóa ảo hợp nhất của CUDA.
- Bộ nhớ đệm expert GPU co giãn: các expert thường dùng chiếm VRAM khả dụng, trong khi không gian bộ nhớ đệm có thể tạm thời được trả lại cho activation prefill dài và các buffer staging.
- Staging prefill: các expert không được đệm được sao chép trước một layer để quá trình truyền qua PCIe có thể chồng lấp với tính toán.
- Tầng CPU tùy chọn: chế độ nhanh phân công các lần bỏ lỡ bộ nhớ đệm lạnh được chọn trong quá trình giải mã cho kernel CPU AVX2.
- Giải mã theo lô: tối đa bốn stream có thể giải mã cùng lúc với cấu hình
-ambs 4được ghi nhận. - Cấu hình có thể tái lập: phiên bản mô hình, container digest, phiên bản exllamav3, lựa chọn Triton, benchmark và bộ kiểm tra chất lượng tham chiếu đều được cố định.
Chọn chế độ nhanh hoặc chính xác
Máy chủ cung cấp hai chế độ vận hành thông qua biến môi trường GLM53_MODE.
Chế độ nhanh
fast là chế độ mặc định. Chế độ này kết hợp bộ nhớ đệm expert GPU, các lần bỏ lỡ bộ nhớ đệm zero-copy, xử lý CPU AVX2 cho một số lần bỏ lỡ bộ nhớ đệm lạnh trong quá trình giải mã, giải mã theo lô và các kernel giải mã hợp nhất. Trên máy chủ được đo, chế độ này sử dụng khoảng 218 GiB, tương đương 234 GB, RAM máy chủ.
Chiến dịch đo được công bố ghi nhận khoảng 28,15 token mỗi giây cho một stream giải mã, 31,57 token mỗi giây tổng cộng cho hai stream và 33,98 token mỗi giây tổng cộng cho bốn stream. Kiểm tra nhanh bằng hình ảnh trên digest hiện tại đo được lần lượt 28,88, 31,27 và 35,00 token mỗi giây tổng cộng.
Cảnh báo chất lượng: prefill là chính xác, nhưng giải mã ở chế độ nhanh không chính xác từng bit so với exllamav3 nguyên bản. Một phép kiểm tra giải mã theo cặp báo cáo KL trung bình 0,0053 và mức tương đồng top-1 là 0,977. Hãy dùng chế độ chính xác khi cần đầu ra tương đương.
Chế độ chính xác
exact tắt tầng CPU và các kernel giải mã chỉ dành cho chế độ nhanh. Chế độ này vẫn giữ bộ nhớ đệm expert GPU và các lần bỏ lỡ bộ nhớ đệm zero-copy trên bộ nhớ máy chủ. Bộ kiểm tra tham chiếu đo được mức tương đồng top-1 là 1,0000 và KL bằng 0; mức sử dụng bộ nhớ máy chủ khoảng 111 GiB, tương đương 119 GB.
Chế độ chính xác chậm hơn nhưng sử dụng ít RAM hơn nhiều. Tốc độ giải mã một stream đo được là 12,57 token mỗi giây ở ngữ cảnh ngắn hơn đã kiểm thử, so với khoảng 7,5 đến 8,4 token mỗi giây khi exllamav3 nguyên bản đặt các expert không vừa vào worker CPU.
Yêu cầu phần cứng và phần mềm
GPU và driver
- Một GPU NVIDIA có 24 GB VRAM.
- GPU
sm_86như RTX 3090 hoặc A5000 là mục tiêu đã được đo. - Các binary
sm_86đi kèm cũng chạy trênsm_89, bao gồm RTX 4090, nhưng cấu hình đó chưa được đo. - Cần driver NVIDIA hỗ trợ CUDA 13.0 vì image sử dụng CUDA 13.0.3.
- Khuyến nghị PCIe 4.0 x16. Các lần bỏ lỡ bộ nhớ đệm tiêu thụ khoảng 25 GB/s trên liên kết đã đo.
Bộ nhớ máy chủ
- Chế độ nhanh: tổng bộ nhớ 256 GiB là mức tối thiểu khi hầu như không chạy tác vụ khác; khuyến nghị từ 320 GB trở lên. Nếu dùng giới hạn bộ nhớ Docker, hãy cấp ít nhất
230g. - Chế độ chính xác: 128 GiB là mức tối thiểu, còn khuyến nghị từ 160 GB trở lên.
CPU và bộ nhớ lưu trữ
- Chế độ nhanh yêu cầu CPU x86-64 với AVX2, FMA và F16C.
- Khuyến nghị khoảng 24 lõi vật lý và DDR4 tám kênh hoặc tốt hơn để đạt hành vi chế độ nhanh đã đo.
- Checkpoint chiếm khoảng 117 GiB, tương đương 125,3 GB, trên ổ đĩa.
- Khuyến nghị bộ nhớ NVMe để giảm thời gian tải mô hình.
- Cần có Docker, NVIDIA Container Toolkit và Hugging Face CLI cho thiết lập được ghi nhận.
Cài đặt và khởi động máy chủ bằng Docker
Bước 1: Tải checkpoint
Tải checkpoint 3,05-bpw đã cố định vào một thư mục cục bộ:
hf download turboderp/GLM-5.3-Flash-exl3 \
--revision 3.05bpw \
--local-dir /data/GLM-5.3-Flash-exl3-3.05bpw
Bạn cũng có thể mount một thư mục trống tại /models. Nếu thiếu config.json, container sẽ tải checkpoint được cấu hình vào thư mục đó.
Bước 2: Khởi chạy chế độ nhanh
Lệnh sau khởi động máy chủ trên GPU 0 và xuất bản máy chủ tại cổng 30000. Lệnh sử dụng image digest chứa bản sửa lỗi phân phối streaming.
docker run -d \
--name glm53 \
--gpus '"device=0"' \
--ulimit memlock=-1 \
--shm-size 16g \
-p 30000:30000 \
-v /data/GLM-5.3-Flash-exl3-3.05bpw:/models \
ghcr.io/0xsero/glm53-flash-offload@sha256:bb633b0bcb85573ad40b6c408af5e1036ae062c593e42479f4e4d2ab521e551d
Cài đặt --ulimit memlock=-1 được khuyến nghị vì máy chủ ghim một lượng lớn bộ nhớ máy chủ. Image đã công bố cũng tải được mà không cần cài đặt này trên trình điều khiển được đo kiểm, nhưng không nên mặc định rằng hành vi đó sẽ áp dụng cho mọi máy chủ.
Bước 3: Theo dõi quá trình khởi động
docker logs -f glm53
Chờ thông báo chứa loaded in ... s. Trên hệ thống được ghi nhận, quá trình khởi động mất khoảng hai đến ba phút, tùy thuộc vào bộ nhớ đệm và điều kiện của máy chủ.
Bước 4: Xác nhận trạng thái hoạt động
curl -s http://localhost:30000/health
Chạy chế độ chính xác
Để ưu tiên tính tương đương đầu ra và giảm mức sử dụng bộ nhớ máy chủ, hãy thêm -e GLM53_MODE=exact:
docker run -d \
--name glm53-exact \
--gpus '"device=0"' \
--ulimit memlock=-1 \
--shm-size 16g \
-p 30000:30000 \
-e GLM53_MODE=exact \
-v /data/GLM-5.3-Flash-exl3-3.05bpw:/models \
ghcr.io/0xsero/glm53-flash-offload@sha256:bb633b0bcb85573ad40b6c408af5e1036ae062c593e42479f4e4d2ab521e551d
Không chạy đồng thời các ví dụ nhanh và chính xác trên cùng một cổng. Hãy dừng và xóa container đầu tiên trước khi chuyển chế độ:
docker rm -f glm53
Sử dụng API cơ bản
Gửi yêu cầu hoàn tất cuộc trò chuyện
curl -s http://localhost:30000/v1/chat/completions \
-H 'content-type: application/json' \
-d '{"model":"glm-5.3-flash","messages":[{"role":"user","content":"Explain zero-copy model offloading."}],"max_tokens":512}'
Tên model được cung cấp mặc định là glm-5.3-flash. Trừ khi được cấu hình rõ ràng, max_tokens mặc định bằng phần ngữ cảnh còn lại thay vì bị giới hạn ở một giá trị cố định nhỏ.
Tắt suy luận
Quá trình suy luận của GLM được trả về trong reasoning_content. Để tắt suy luận cho một yêu cầu, hãy truyền tùy chọn của mẫu trò chuyện:
curl -s http://localhost:30000/v1/chat/completions \
-H 'content-type: application/json' \
-d '{"model":"glm-5.3-flash","messages":[{"role":"user","content":"Reply with one sentence."}],"chat_template_kwargs":{"enable_thinking":false},"max_tokens":128}'
Truyền phát phản hồi
curl -N http://localhost:30000/v1/chat/completions \
-H 'content-type: application/json' \
-d '{"model":"glm-5.3-flash","messages":[{"role":"user","content":"Write a short explanation of mixture-of-experts models."}],"stream":true,"max_tokens":512}'
Hãy sử dụng digest bb633b0b... đã ghim ở trên. Image cũ 1159044a... tạo đầu ra ở tốc độ tối đa nhưng phân phối các sự kiện truyền phát với tốc độ xấp xỉ một nửa trước khi xả phần tồn đọng ở cuối.
Liệt kê các model có sẵn
curl -s http://localhost:30000/v1/models
Kiểm tra thống kê thời gian chạy
curl -s http://localhost:30000/stats
Endpoint thống kê bao gồm thông tin lượt truy cập bộ nhớ đệm expert và các bộ đếm tầng CPU. Các endpoint bổ sung gồm /v1/completions, /server_info và các route dạng SGLang /generate và /tokenize.
Bản triển khai chỉ hỗ trợ văn bản. Vision tower của checkpoint không được tải.
Sử dụng công cụ kiểu OpenAI
Endpoint trò chuyện chấp nhận trường tools. Các biểu thức công cụ được tạo ở định dạng nội bộ <tool_call> của GLM sẽ được chuyển đổi thành tool_calls tương thích với OpenAI trong phản hồi. Vì vậy, các ứng dụng máy khách có thể sử dụng vòng lặp gọi công cụ thông thường: gửi định nghĩa công cụ, kiểm tra lệnh gọi công cụ của assistant, thực thi hàm và gửi kết quả công cụ trở lại dưới dạng một tin nhắn khác.
Điều chỉnh ngữ cảnh và tham số máy chủ
Các tham số đặt sau tên image sẽ được nối vào lệnh máy chủ và giá trị cuối cùng sẽ được áp dụng. Ví dụ, để sử dụng bộ nhớ đệm KV 65.536 token:
docker run -d \
--name glm53-64k \
--gpus '"device=0"' \
--ulimit memlock=-1 \
--shm-size 16g \
-p 30000:30000 \
-v /data/GLM-5.3-Flash-exl3-3.05bpw:/models \
ghcr.io/0xsero/glm53-flash-offload@sha256:bb633b0bcb85573ad40b6c408af5e1036ae062c593e42479f4e4d2ab521e551d \
-cs 65536
Bộ nhớ đệm KV nhỏ hơn có thể dành chỗ cho nhiều slot bộ nhớ đệm expert hơn. Cấu hình benchmark đã công bố sử dụng bộ nhớ đệm KV 131.072 token, kích thước batch tối đa là tám và kích thước chunk là 8.192 token.
Cài đặt không dùng Docker
Việc cài đặt gốc yêu cầu exllamav3 1.5.1 được xây dựng cho GPU mục tiêu. Từ bản sao của dự án, hãy chạy trình cài đặt extension rồi khởi động entrypoint được cung cấp với các đường dẫn repository và model đã thiết lập:
scripts/install.sh
GLM53_ROOT=$PWD \
GLM53_MODEL_DIR=/path/to/model \
docker/entrypoint.sh
Trình cài đặt xây dựng các extension tùy chỉnh của dự án. Docker vẫn là phương thức có khả năng tái tạo cao nhất vì nó ghim CUDA, PyTorch, Triton, SGLang, exllamav3, commit của dự án và cấu hình máy chủ đã được kiểm thử.
Xác thực chất lượng và hiệu năng
Chấm điểm panel tham chiếu
Từ bản sao repository, hãy sử dụng máy khách benchmark chỉ dùng thư viện chuẩn đi kèm:
python3 bench/score_ref_panel.py \
--url http://127.0.0.1:30000 \
--panel reference/glm-5.3-flash-exl3-ref-panel.json \
--out score.json
Panel teacher-forced phải báo cáo mức tương đồng top-1 là 1.0000 và KL bằng 0 ở cả chế độ nhanh lẫn chính xác. Panel này đánh giá đường dẫn prefill hoặc teacher-forced và không chứng minh rằng quá trình giải mã tự hồi quy ở chế độ nhanh là chính xác.
Chạy kiểm tra tốc độ
python3 bench/sweep.py \
--url http://127.0.0.1:30000 \
--card rtx-3090-24gb/glm-5.3-flash-offload \
--template glm \
--config "bb633b0b fast" \
--prefill 8192 32768 \
--conc 1 2 4 \
--reps 3 \
--dec-reps 2 \
--no-early-exit \
--out sweep.json
Kiểm tra việc truyền dữ liệu dạng streaming
python3 bench/stream_rate.py --url http://127.0.0.1:30000
Kết quả đạt yêu cầu phải cho thấy văn bản xuất hiện đều đặn, thay vì khoảng một nửa phản hồi chỉ xuất hiện trong đợt cuối.
Tinh chỉnh nâng cao
Xác định quy mô tầng CPU
Mặc định, GLM53_CT_CPUS=auto chọn một CPU logic cho mỗi lõi vật lý và để lại hai lõi vật lý đầu tiên cho hệ điều hành cùng luồng Python điều khiển GPU. Trên máy chủ 24 lõi được đo, thiết lập này sử dụng các CPU từ 2 đến 23 và 22 luồng worker.
Để chỉ định rõ ràng, hãy đặt các giá trị như sau:
-e GLM53_CT_CPUS=2-23 \
-e GLM53_CT_THREADS=22
Mô hình chi phí CPU sử dụng GLM53_CT_B, được đo là 0,104 mili giây cho mỗi chuyên gia với 22 luồng. README khuyến nghị ước tính giá trị này cho N luồng worker bằng 0.104 x 22 / N. Ví dụ, máy chủ 16 lõi để trống hai lõi sẽ sử dụng 14 luồng worker và giá trị gần 0,16.
Với ít hơn khoảng 12 lõi vật lý, phần lớn cache miss dự kiến sẽ quay lại đường PCIe, khiến hiệu năng tiến gần đến chế độ exact. Trong trường hợp đó, chế độ exact có thể là lựa chọn tốt hơn.
Kiểm soát bố cục bộ nhớ của tầng CPU
GLM53_CT_SWZ=1 khiến tầng CPU sử dụng một bản sao các chuyên gia riêng biệt, liên tục theo khối. Đây là cấu hình nhanh đã được đo và làm tăng mức sử dụng RAM khoảng 114,2 GB. Đặt thành 0 khiến tầng CPU đọc trực tiếp bản sao gốc được ghim, giảm đáng kể mức sử dụng bộ nhớ, nhưng dự án báo cáo rằng benchmark kernel chuyên gia CPU chậm hơn khoảng 40%. Hiệu năng đầu-cuối của thiết lập này chưa được đo.
Tinh chỉnh phần bộ nhớ đệm dự trữ
GLM53_EC_RESERVE_GB giữ lại một phần VRAM trống sau khi cấp phát cache chuyên gia. Giá trị mặc định là 1,5 GB ở chế độ fast và 1,0 GB ở chế độ exact. Hãy giữ mức dự trữ của chế độ fast ở 1,5 GB, trừ khi các lượt prefill dài bị hết bộ nhớ.
GLM53_EC_ELASTIC_GB mặc định là 10 GB. Lượng bộ nhớ cache này có thể được giải phóng cho các activation prefill và quá trình staging, sau đó được thu hồi để decode. GLM53_EC_STAGE_GB mặc định là 2,6 GB cho mỗi bộ đệm staging, với hai bộ đệm được sử dụng để chồng lấp.
Sử dụng GPU lớn hơn
Cache chuyên gia tự xác định kích thước dựa trên VRAM khả dụng sau khi tải mô hình và áp dụng mức dự trữ đã cấu hình. Vì vậy, card 32 GB hoặc 48 GB sẽ nhận được nhiều slot chuyên gia hơn, giúp tăng tỷ lệ cache hit và cải thiện hiệu năng decode. README không cung cấp kết quả của các card lớn hơn này.
RTX 4090 có thể chạy bản build sm_86 đi kèm, dù chưa được đo. Blackwell yêu cầu build lại với:
TORCH_CUDA_ARCH_LIST="8.6;12.0"
Một kiến trúc khác cũng có thể cần bản pin Triton mới. Nếu tạo bản pin mới, hãy xác minh rằng bảng tham chiếu vẫn ở top-1 1.0000 và KL 0.
Bảo vệ các lựa chọn Triton chính xác
Image cố định các lựa chọn kernel prefill KDA linear-attention thông qua data/triton_pin_exact.json. Cho phép Triton chọn cấu hình khác có thể làm thay đổi việc làm tròn số dấu phẩy động. Hãy giữ GLM53_TRITON_PIN ở giá trị mặc định khi cần hành vi prefill tương đương tham chiếu.
Pipeline offloading hoạt động như thế nào
- Nạp các chuyên gia được định tuyến vào bộ nhớ máy chủ được ghim. Mỗi layer nhận một vùng nhớ được ghim có kích thước chính xác, và các con trỏ chuyên gia của exllamav3 tham chiếu đến các bí danh CUDA UVA.
- Điền cache CLOCK co giãn vào VRAM. Các lựa chọn từ router được loại bỏ trùng lặp, cache hit được đánh dấu và các mục cần thay thế được chọn cho những cache miss được chấp nhận.
- Đọc các chuyên gia chưa được cache qua PCIe. Kernel của exllamav3 có thể truy cập biểu diễn trong bộ nhớ máy chủ được ghim mà không cần bản sao đồng bộ ở phía máy chủ.
- Staging cho các lượt prefill dài. Khi số lượng lựa chọn trên mỗi layer đủ lớn, các chuyên gia bị thiếu được sao chép vào bộ đệm staging trước một layer trong khi layer trước đó đang tính toán.
- Phân tách các cache miss decode được chọn ở chế độ fast. Mô hình chi phí đưa các cache miss còn nóng qua thực thi GPU zero-copy và chuyển các cache miss lạnh được chọn sang tầng CPU.
- Kết hợp kết quả CPU và GPU. CPU công bố công việc của mình thông qua bộ nhớ được ghim và ánh xạ, còn GPU cộng phần kết quả FP32 sau khi chờ một cờ ở phía thiết bị thay vì đồng bộ hóa với máy chủ.
Lưu ý vận hành
- Sử dụng
GLM53_MODE=exactkhi đầu ra decode phải khớp với exllamav3 mặc định. - Tránh image cũ hơn
sha256:1159044a...nếu độ trễ streaming quan trọng. Hãy sử dụng digestsha256:bb633b0b...được tài liệu hóa. - Hiện tại chế độ fast giữ hai bản sao chuyên gia trong RAM máy chủ. Hãy đảm bảo đủ bộ nhớ trước khi khởi động container.
- Không nên giả định thông lượng RTX 3090 đã đo được sẽ giữ nguyên trên các liên kết PCIe chậm hơn. Tốc độ decode nhạy cảm với lưu lượng cache miss.
- Theo dõi
/stats, bộ nhớ hệ thống và bộ nhớ GPU khi thay đổi kích thước context, mức dự trữ cache, độ đồng thời hoặc thiết lập staging. - Máy chủ chỉ xử lý văn bản; triển khai này không hỗ trợ đầu vào hình ảnh.
Kết luận
glm53-flash-offload giúp một checkpoint mixture-of-experts có kích thước đặc biệt lớn hoạt động thực tế trên GPU 24 GB đơn lẻ bằng cách kết hợp lưu trữ máy chủ được ghim, đọc PCIe zero-copy, cache VRAM co giãn, truyền prefill theo từng giai đoạn và tầng CPU AVX2 tùy chọn. Hãy bắt đầu với Docker image đã được pin, chọn chế độ exact để bảo toàn độ trung thực của đầu ra hoặc chế độ fast để đạt thông lượng cao, sau đó xác thực cài đặt bằng các kiểm tra chất lượng, tốc độ và streaming đi kèm trước khi tinh chỉnh cache hoặc CPU.
