ggml phát hành v1.0.0: dọn API cũ, thêm FP8

Phần mềm14 tháng 11, 2026·5 phút đọc

Thư viện ggml - lõi tensor tính toán phía sau llama.cpp - đã chính thức lên phiên bản 1.0.0 sau nhiều năm ở giai đoạn 0.x. Bản phát hành loại bỏ API không còn dùng, thêm hỗ trợ FP8 và tối ưu hiệu năng trên hàng loạt backend từ CUDA, Metal, Vulkan đến WebGPU, Hexagon và CPU.

ggml phát hành v1.0.0: dọn API cũ, thêm FP8

ggml chính thức bước sang phiên bản 1.0.0

Thư viện ggml - lõi tính toán tensor đứng sau llama.cpp, công cụ chạy mô hình ngôn ngữ lớn (LLM) trên máy cá nhân - vừa phát hành v1.0.0 vào ngày 13/11, đánh dấu lần đầu tiên dự án thoát khỏi chuỗi phiên bản 0.x. Đây là bước ngoặt với cộng đồng chạy AI cục bộ, bởi ggml là nền tảng mà nhiều công cụ suy luận (inference) mã nguồn mở dựa vào.

Bản 1.0.0 không chỉ là mốc đánh số: nó dọn dẹp các API công khai đã lỗi thời, bổ sung hỗ trợ FP8, thêm tùy chọn cắt (truncate) cho YaRN, và mang theo khối lượng lớn công việc tối ưu hiệu năng trải rộng trên gần như mọi backend phần cứng.

Thay đổi về API

  • Loại bỏ API bị đánh dấu lỗi thời và xóa các phép toán cũ DIAG_MASK_INF/DIAG_MASK_ZERO, đồng thời nâng giao thức RPC để từ chối các peer không tương thích.
  • Thêm ggml_rope_set_truncate/ggml_rope_get_truncate để điều khiển cách làm tròn biên hiệu chỉnh của YaRN (một kỹ thuật mở rộng ngữ cảnh cho mô hình).
  • Cài đặt lan truyền ngược (backward pass) cho phép toán TRI.
  • Thêm kiểm thử độ chính xác cho src1 của MUL_MAT và cơ chế kiểm soát ggml_prec_set_acc.
  • Nâng giao thức RPC lên v9 với tốc độ nạp nhanh hơn và xử lý lỗi mềm mỏng khi endpoint không truy cập được hoặc bắt tay (handshake) thất bại.

Thay đổi ở phần lõi

Bộ lập lịch (scheduler) giờ bỏ qua việc tải lên các đầu vào không được đọc và chỉ tải trước những đầu vào do các lát (split) trước đó tạo ra. Bộ nhớ đệm MoE (Mixture of Experts) có thể tính một phần các lần trượt cache trên CPU rồi sao chép kết quả trở lại bất đồng bộ. Backend Meta nâng giới hạn compute view cho các buffer chứa ít tensor.

Tối ưu theo từng backend

CUDA

  • Thêm few-row MMQ cho kích thước batch 2-24 và MMVF cho nhân ma trận BF16 ít hàng.
  • Hỗ trợ OCP FP8 và hợp nhất (fuse) nhân ma trận gate/up NVFP4 với GLU trong MMQ.
  • Mở rộng FlashAttention với cấu hình head-size-256 cho sm70 và các head size 40/72 dùng MMA.
  • Cải thiện xử lý đồ thị: bỏ qua kiểm tra tương thích khi tái sử dụng, tạo lại khi cluster-dim thay đổi, chuyển trạng thái đồ thị.
  • MoE: bỏ qua tile stream-k MMQ rỗng, tuyến tính hóa bố cục MoE, xử lý NaN sau bias.
  • Thêm debug buffer pool và giảm một nửa dung lượng đặt trước VMM pool, có cơ chế thử lại.

HIP: dùng workspace BLAS cố định và thêm bộ chỉ mục (indexer) MFMA cho CDNA2. Thêm đường dẫn nhanh SSM_SCAN với d_state=64 và làm radix Top-K mang tính xác định khi có giá trị bằng nhau.

Metal

  • Hợp nhất định tuyến MoE và giữ các nhóm node có thể fuse trong cùng một command buffer.
  • Làm radix Top-K xác định khi hòa, thêm mul_mm cho trường hợp 32 ≤ K < 64, và chặn truy cập ngoài biên ở kernel FA output và SOLVE_TRI.

Vulkan

  • Thêm kernel FlashAttention prefill cho chip Intel.
  • Thêm API sao chép tensor theo lô, giao diện test-fusion và phát hiện ReBAR.
  • Bật KV đã giải lượng tử với CM2, cắt YaRN, split-K tile lớn cho RDNA3/4, và matmul coopmat lớn trên driver AMD mới.
  • Thêm shader concat transpose dạng tile và kernel FWHT cho độ rộng khối trên 512.
  • Sửa lỗi truy cập ngoài biên trên MoltenVK, giới hạn workgroup GROUP_NORM và kích thước scratch của FA.

SYCL

  • Thêm bộ lập lịch MoE phía thiết bị.
  • Làm cache FA của oneDNN an toàn đa luồng, mở khóa SDPA hợp nhất cho Alchemist ở head_dim=64.
  • Cache device-id và từ chối buffer vượt VRAM; thêm làm tròn chính xác cho CPY sang Q4_1/Q5_1/Q8_0, CLAMP có stride và SWIGLU_OAI dạng f16.

OpenCL

  • Thêm FlashAttention phân rã cho Adreno và cải thiện hiệu năng giải mã (decode).
  • Thêm kernel GEMV đa cột q6_k dạng tile, q8_0, f32/q5_k và MUL_MAT_ID f32.
  • Thêm arange, sigmoid phi liên tục, repeat cho f16/i32/i16/bf16, và kernel DSV4 HC pre/post.
  • Bật GEMV đa cột mặc định cho Adreno X2.

WebGPU

  • Hỗ trợ API tensor theo lô và trả về maxBufferSize từ get_max_size.
  • Thêm các kernel GROUP_NORM, MEAN, COUNT_EQUAL và PAD_REFLECT_1D.
  • Hỗ trợ cấu hình cắt YaRN.

Hexagon

  • Thêm hỗ trợ Q5_0/Q5_1, tối ưu conv_2d và bổ sung conv_3d.
  • Hợp nhất phép cộng residual sau chuẩn hóa vào RMS_NORM_MUL, thêm set_tensor_n.
  • Tự động nạp libhtp và sửa lỗi cắt cụt handle FastRPC 64-bit.

CPU: chuyển MUL_MAT sang src1 kiểu F32 và tích lũy V của FlashAttention ở F32. Thêm kernel RVV GATED_DELTA_NET và Q4_1 32x256 HP cho SpacemiT, bật repack MXFP4 của IME2, kích hoạt tile simd_gemm 4x4 trên ARM NEON và thêm VXE bf16/q8_0 cho llamafile.

Ngoài ra còn các cập nhật cho CANN, ZDNN và OpenVINO (hỗ trợ cấu hình cắt YaRN).

Góc nhìn

Việc ggml lên 1.0.0 có ý nghĩa thực tế với những ai đang tự vận hành mô hình AI: dọn bỏ API lỗi thời giúp mã nguồn ổn định hơn, nhưng cũng đồng nghĩa các dự án gắn chặt với ggml cần rà soát lại phần gọi API cũ, đặc biệt là các phép DIAG_MASK đã bị xóa và giao thức RPC đã đổi số phiên bản. Nếu bạn đang chạy cụm suy luận qua RPC, việc nâng cấp cần làm đồng bộ giữa các node để tránh bị từ chối kết nối.

Điểm đáng chú ý thứ hai là độ phủ backend. Những tối ưu như FP8, few-row MMQ hay bộ lập lịch MoE phía thiết bị cho thấy ggml đang tối ưu sâu cho cả GPU phổ thông lẫn phần cứng nhúng và máy cá nhân. Với doanh nghiệp muốn triển khai mô hình tại chỗ thay vì thuê cloud, một thư viện trưởng thành về mặt phiên bản nhưng vẫn mở rộng phần cứng nhanh là tín hiệu tích cực để cân nhắc đầu tư vào hạ tầng suy luận nội bộ.

Nguồn: github.com · Quy trình biên tập

Chia sẻ:FacebookX