Phạm Văn Thư
Mô hình và suy luận AI · AI-assisted content

SGLang: RadixAttention, đầu ra có cấu trúc và triển khai riêng cho bệnh viện tư

Đăng ngày 12/10/2026

Mục lục bài nghiên cứu
Hình đại diện SGLang — mô hình AI mã nguồn mở

SGLang trong ba câu hỏi: là gì, khi nào dùng, khi nào tránh

SGLang là framework suy luận mã nguồn mở cho mô hình ngôn ngữ lớn, mô hình thị giác–ngôn ngữ và mô hình khuếch tán (diffusion), được README mô tả là tối ưu cho tải dạng agent, phục vụ quy mô lớn và sinh rollout cho học tăng cường [1]. Kho mã còn chứa SGLang Diffusion để sinh ảnh, video [1] và tài liệu về Model Gateway, lớp định tuyến viết bằng Rust đứng trước các worker [7].

Nên cân nhắc SGLang khi lời nhắc có phần đầu lặp lại nhiều, khi kết quả phải khớp JSON schema hay regex, hoặc khi cần gateway cân bằng tải theo cache [9][10][7]. Nên tránh khi thiếu GPU và người vận hành, khi chỉ phục vụ vài người, hoặc khi chưa sẵn sàng tự cấu hình bảo mật, vì gateway mặc định không xác thực [7].

Với bệnh viện, khuyến nghị của bài là chạy SGLang trong mạng nội bộ, bật khóa API ở gateway và khóa quản trị riêng ở runtime, mã hóa đường truyền, kiểm soát log và bộ đệm, và chỉ dùng đầu ra như bản nháp để người có thẩm quyền duyệt [7][8].

Vấn đề: tiền tố lặp lại, định dạng bắt buộc và nhiều worker cần điều phối

Phần lớn ứng dụng LLM trong tổ chức gửi lặp lại một khối hướng dẫn dài, một mẫu biểu hay tài liệu tham chiếu, rồi chỉ thay phần dữ liệu ở cuối. Tài liệu HiCache nêu rõ: khi nhiều yêu cầu chung tiền tố, KV cache (bộ nhớ đệm khóa và giá trị attention) của phần đó giống hệt nhau, và RadixAttention dùng bộ nhớ GPU còn trống để lưu, tái sử dụng chúng thay vì tính lại [9].

Vấn đề thứ hai là định dạng: hệ thống nghiệp vụ cần trường dữ liệu đúng kiểu chứ không cần đoạn văn trông giống JSON. SGLang ràng buộc đầu ra bằng JSON schema, regex hoặc EBNF, và tài liệu khẳng định đầu ra được bảo đảm tuân theo ràng buộc [10]. Vấn đề thứ ba là điều phối nhiều worker, nhiều mô hình, phần việc của Model Gateway [7].

Cần tách bạch: hợp lệ về cú pháp khác với đúng về nội dung. Một bản JSON hoàn hảo vẫn có thể ghi sai tên thuốc; tính đúng đắn chuyên môn vẫn cần con người kiểm tra.

Hai tầng kiến trúc: runtime SRT với cây radix và Model Gateway viết bằng Rust

Tầng thứ nhất là runtime, mà tài liệu gateway gọi là SRT worker [7], khởi chạy bằng sglang serve hoặc python -m sglang.launch_server; nó phục vụ API tương thích OpenAI, API riêng /generate và engine offline trong Python [3][10]. Tham số máy chủ cho thấy bên trong có tokenizer manager, detokenizer manager, bộ lập lịch với các chính sách như fcfs mặc định, lpm hay priority, cây radix cho prefix cache và backend ngữ pháp [8].

RadixAttention tổ chức KV cache thành cây radix: mỗi nút ứng với một đoạn token liên tiếp, đường từ gốc tới lá là tiền tố của một yêu cầu, và các yêu cầu chung tiền tố dùng lại cùng nút [9]. HiCache mở rộng thành ba tầng: L1 là bộ nhớ GPU, L2 là RAM máy chủ riêng của từng instance, L3 là backend lưu trữ có thể dùng chung nếu được cấu hình [9].

Tầng thứ hai là Model Gateway. Control plane gồm Worker Manager, Job Queue, Load Monitor, Health Checker và Tokenizer Registry; data plane gồm router HTTP, router gRPC chạy hoàn toàn bằng Rust, và router OpenAI chuyển tiếp ra nhà cung cấp bên ngoài nhưng giữ lịch sử hội thoại tại chỗ, trong bộ nhớ, PostgreSQL, Oracle hoặc Redis [7].

Hành trình của một yêu cầu: gateway, cây radix, ràng buộc ngữ pháp

Ứng dụng gửi yêu cầu tới gateway, kèm Bearer token nếu đặt --api-key [7]. Phần vượt giới hạn đồng thời chờ trong hàng FIFO; hàng đầy trả 429, chờ quá hạn trả 408 [7]. Chính sách mặc định cache_aware kết hợp độ khớp tiền tố với tải để chọn worker; worker lỗi thì gateway thử lại có backoff, còn circuit breaker theo từng worker chặn lỗi lan rộng [7].

Tại worker, lời nhắc được tách từ và đối chiếu với cây radix để tìm phần đã có KV cache; với HiCache, phần thiếu ở L1 và L2 có thể được nạp trước từ L3 khi đoạn khớp vượt ngưỡng mặc định 256 token [9]. Nếu yêu cầu có json_schema, backend ngữ pháp, mặc định là XGrammar, ràng buộc các token sinh ra để kết quả khớp lược đồ [10].

Sau prefill, KV cache mới có thể được ghi xuống L2 hoặc L3 theo chính sách write-back [9]. Log yêu cầu, kho lưu phản hồi và backend lịch sử của gateway, nếu được bật, đều giữ lại một phần dữ liệu [8][7]; các điểm này được phân tích ở mục riêng bên dưới.

Tính năng có trong tài liệu, tách khỏi phần đang tích hợp

Đầu ra có cấu trúc gồm JSON schema, regex, EBNF và structural tag cho định dạng gọi công cụ, với ba backend XGrammar (mặc định), Outlines (chỉ JSON schema và regex) và Llguidance [10]. RadixAttention có thể tắt bằng --disable-radix-cache và có các chính sách loại bỏ lru, lfu, slru, priority; HiCache hỗ trợ backend L3 file, mooncake, hf3fs, nixl, aibrix [8][9].

Tài liệu mô tả song song tensor và data, chạy nhiều nút như Llama 3.1 405B fp16 trên hai nút với tp 16 [5], lượng tử hóa fp8, LoRA với mặc định tối đa 8 adapter mỗi lô, lập lịch ưu tiên, chế độ suy luận tất định và parser cho reasoning, tool call [8]. Gateway thêm năm chính sách cân bằng tải, MCP client, khám phá dịch vụ Kubernetes, middleware WASM chạy sandbox và hơn 40 metric Prometheus [7].

README liệt kê GPU NVIDIA, AMD Instinct, Google TPU, Intel, Apple Silicon, Huawei Ascend và Moore Threads; AWS Trainium, Cambricon, Qualcomm cùng vài nền tảng khác được ghi là đang tích hợp, nên chưa nên coi là sẵn sàng [1]. torch.compile bị đánh dấu ngoài bảo trì [8]. SGLang Diffusion có lệnh sglang generate và các chế độ hiệu năng speed, memory, auto [4].

Ai hợp với SGLang: đội hạ tầng AI, nhóm học tăng cường, tổ chức cần giữ dữ liệu trong nhà

Nhóm đầu tiên là đội hạ tầng AI ở công ty công nghệ, nhà cung cấp đám mây và trường đại học. README cho biết dự án do LMSYS, một tổ chức phi lợi nhuận, bảo trợ và được các framework như verl, slime, AReaL dùng để sinh rollout [1].

Nhóm thứ hai là tổ chức có tải lặp tiền tố và đầu ra cứng: y tế, bảo hiểm, ngân hàng với biểu mẫu chuẩn, thương mại điện tử cần trích xuất thuộc tính sản phẩm. Khi cần nhiều mô hình sau một cổng, gateway có chế độ IGW áp chính sách riêng cho từng mô hình [7].

Không hợp là cá nhân hoặc doanh nghiệp nhỏ không có GPU. Hướng dẫn nhanh nhắm tới Linux với GPU NVIDIA và driver tương thích CUDA 13 [3]; README có nhắc CPU Xeon và Apple Silicon [1], nhưng các nguồn đã đọc chưa đủ để đánh giá trải nghiệm trên những nền tảng đó.

Đề xuất cho bệnh viện tư: bản nháp tóm tắt ra viện có cấu trúc, bác sĩ duyệt và ký

Tình huống giả định: một bệnh viện tư đa khoa quy mô vừa ở Hà Nội thấy bác sĩ mất nhiều thời gian viết giấy ra viện. Bệnh viện muốn công cụ đọc ghi chép điều trị trong hệ thống thông tin bệnh viện (HIS) và tạo bản nháp có cấu trúc để bác sĩ sửa, ký. Dữ liệu sức khỏe trong hồ sơ bệnh án thường thuộc nhóm dữ liệu cá nhân nhạy cảm, nên pháp chế phải xác nhận nghĩa vụ cụ thể trước.

Luồng đề xuất: HIS xuất phần ghi chép cần thiết; dịch vụ trung gian thay các định danh không cần thiết bằng mã; yêu cầu đi qua gateway SGLang nội bộ có khóa API và TLS; worker chạy một mô hình mở có năng lực tiếng Việt; kết quả là JSON gồm chẩn đoán, thủ thuật, thuốc khi ra viện, lịch tái khám. Ràng buộc json_schema giúp HIS nhận đúng cấu trúc; lời nhắc vẫn nên mô tả định dạng như tài liệu khuyến nghị [10].

Phần hướng dẫn dài như quy ước viết tắt, mẫu tóm tắt và danh mục mã bệnh rút gọn nên đặt ở đầu lời nhắc, giống hệt nhau giữa các yêu cầu, để RadixAttention tái sử dụng KV cache [9].

Ranh giới phải thành văn bản: công cụ không chẩn đoán, không kê đơn; mỗi trường chỉ ra đoạn ghi chép làm căn cứ; chỉ bản bác sĩ đã ký mới vào hồ sơ; hội đồng chuyên môn hoặc đạo đức phê duyệt thử nghiệm. Đây là đề xuất phân tích, không mô tả bệnh viện nào đã triển khai.

Vận hành: bộ nhớ GPU, cấu hình có phiên bản và đầu dò sức khỏe

SGLang được cài bằng Docker image lmsysorg/sglang hoặc bằng uv với cờ --prerelease=allow, tức cho phép kéo cả gói tiền phát hành [1][3]. Hướng dẫn nhanh chạy với --host 0.0.0.0, trong khi giá trị mặc định là 127.0.0.1 [3][8]; trong bệnh viện nên giữ runtime ở giao diện nội bộ và để gateway làm điểm vào duy nhất.

Tham số --mem-fraction-static quyết định phần GPU cho trọng số và vùng KV cache, nên giảm khi hết bộ nhớ; --max-running-requests giới hạn tải [8]. Cấu hình có thể đặt trong tệp YAML qua --config, --revision ghim mô hình vào một commit, còn --watchdog-timeout mặc định 300 giây cho máy chủ tự dừng khi một lô chạy quá lâu [8].

Khi cần nhiều máy, tài liệu có ví dụ chạy đa nút trực tiếp và qua SLURM [5]; trên Kubernetes, ví dụ dùng LeaderWorkerSet với tối thiểu hai nút tám GPU và mạng RDMA RoCE [6]. Giai đoạn thử ở bệnh viện thường chỉ cần một máy.

Tài liệu SGLang Diffusion tách /liveness (tiến trình còn sống) với /health (sẵn sàng suy luận) và khuyên dành cho startup probe ngân sách lỗi đủ lớn khi nạp mô hình [4]. Metric Prometheus ở runtime mặc định tắt, bật bằng --enable-metrics; gateway có metric riêng và tracing OpenTelemetry [8][7].

Bảo mật: khóa API hai tầng, TLS/mTLS và những mặc định cần đổi

Gateway mặc định không xác thực, và tài liệu ghi chế độ này chỉ dùng trong môi trường tin cậy [7]. Danh mục production gồm TLS cho gateway, mTLS tới worker trên mạng không tin cậy, --api-key, secrets manager, xoay vòng chứng chỉ và khóa, tường lửa; mTLS dùng một HTTP client cho mọi worker, tức giả định chúng cùng một miền bảo mật [7].

Ở runtime, --api-key bảo vệ API, còn --admin-api-key tách riêng endpoint quản trị như cập nhật trọng số, xóa cache và /server_info; TLS bật bằng --ssl-certfile và --ssl-keyfile [8]. --trust-remote-code và --enable-custom-logit-processor mặc định tắt [8]. Không đặt --allowed-media-domains thì media HTTP(S) từ mọi tên miền vẫn được tải, và tài liệu khuyên không mở cấu hình đó cho người dùng không tin cậy [8].

Endpoint quản trị của gateway như đăng ký worker, /flush_cache hay tải lên module WASM [7] phải nằm sau khóa API và chỉ mở cho mạng quản trị. Ví dụ Kubernetes đa nút dùng hostNetwork, hostIPC và privileged, và chính tài liệu ghi chế độ privileged không an toàn, không cô lập GPU hoàn toàn [6].

Danh sách tệp tài liệu tại commit không có SECURITY.md, và nguồn đã đọc không nêu kênh báo lỗ hổng; bệnh viện nên hỏi dự án hoặc đơn vị tích hợp về quy trình vá lỗi trước khi mua sắm.

Dữ liệu bệnh nhân có thể nằm lại ở đâu: log, crash dump, kho phản hồi và HiCache

Câu hỏi đầu tiên của pháp chế là dữ liệu bệnh án còn nằm ở đâu sau khi yêu cầu kết thúc. Tài liệu tham số và thiết kế cho thấy ít nhất năm điểm cần kiểm soát.

Một, --log-requests mặc định tắt; khi bật, mức mặc định 2 ghi metadata, tham số lấy mẫu và một phần đầu vào, đầu ra, còn mức 3 ghi toàn bộ [8]. Hai, --crash-dump-folder lưu yêu cầu đã hoàn tất trong bộ đệm crash dump cùng yêu cầu đang chạy [8]. Ba, kho lưu phản hồi mặc định tắt; nếu bật, dữ liệu nằm trong bộ nhớ tiến trình, không thời hạn và không giới hạn dung lượng [8].

Bốn, lịch sử hội thoại ở gateway có thể lưu trong PostgreSQL, Oracle hoặc Redis; Redis giữ 30 ngày theo mặc định, còn giá trị -1 nghĩa là lưu vĩnh viễn [7]. Năm, backend L3 kiểu file của HiCache ghi mặc định vào /tmp/hicache và được tài liệu gọi là backend để minh họa [9].

KV cache được tính từ chính nội dung bệnh án, nên cần thư mục riêng, quyền truy cập hẹp, mã hóa ổ đĩa và chính sách xóa. --strip-thinking-cache cho phép không lưu đầu ra của mô hình suy luận vào cây radix [8]. Bài đề xuất ký duyệt một bảng kiểm dữ liệu lưu trú trước khi chạy thử bất kỳ hồ sơ nào.

Giấy phép Apache-2.0, tệp LICENSE dạng liên kết của gateway và mã tham khảo từ dự án khác

LICENSE gốc là Apache License 2.0, phụ lục ghi Copyright 2023-2024 SGLang Team [2]. Giấy phép cho phép dùng thương mại, sửa đổi, phân phối và cấp phép bằng sáng chế; người phân phối lại phải giữ giấy phép, các thông báo và đánh dấu tệp đã sửa, còn quyền dùng nhãn hiệu không được cấp [2].

Tệp sgl-model-gateway/LICENSE chỉ chứa đường dẫn ../LICENSE, tức trỏ về giấy phép gốc thay vì một văn bản riêng [11]. README lại liên kết SMG tới kho riêng smg-project/smg [1], còn tài liệu gateway dùng tiền tố SMG_ cho biến môi trường [7]; nếu dùng gateway từ kho riêng đó, phải đọc giấy phép của chính kho ấy.

Cây tệp tại commit còn có tệp giấy phép và thông báo bên thứ ba trong vài thư mục kernel và một LICENSE riêng trong docs; bài chưa đọc các tệp này. README ghi dự án đã học thiết kế và tái sử dụng mã từ Guidance, vLLM, LightLLM, FlashInfer, Outlines, LMQL [1]. Giấy phép không phủ trọng số mô hình, dữ liệu, dự án ở kho khác như SGLang Omni, SpecForge, hay dịch vụ tư vấn nhận qua email [1]; nguồn đã đọc không mô tả phiên bản thương mại nào.

Nguồn lực cho bệnh viện: GPU, RAM cho bộ đệm và thời gian của bác sĩ

Giả định cho giai đoạn thử: một khoa, vài chục bản nháp mỗi ngày, một mô hình cỡ vừa đã lượng tử hóa. Cần máy chủ Linux có GPU NVIDIA với driver tương thích CUDA 13 [3], VRAM đủ cho trọng số và vùng KV cache [8]; nếu bật HiCache, RAM cho L2 phải lớn hơn vùng KV trên GPU vì tỷ lệ cấu hình phải lớn hơn 1 [9]. Cần thêm ổ lưu trữ mã hóa cho mô hình và log.

Nhân lực là phần đắt nhất: kỹ sư hạ tầng, kỹ sư tích hợp HIS, chuyên viên an toàn thông tin, và thời gian bác sĩ để xây bộ đánh giá, chấm điểm, duyệt bản nháp. Thời gian bác sĩ thường bị bỏ quên trong dự toán nhưng quyết định tính khả thi.

Chi phí vận hành gồm cập nhật phiên bản, chạy lại kiểm thử lược đồ mỗi lần đổi mô hình, giám sát và rà log định kỳ. Hiệu quả nên đo bằng thời gian bác sĩ tiết kiệm trên mỗi hồ sơ được duyệt sau khi trừ thời gian sửa lỗi. Bài không đưa giá vì giá phần cứng và nhân sự thay đổi theo thời điểm.

So sánh phương án: engine khác, API đám mây có hợp đồng, hay quy trình không dùng LLM

Cùng tầng có các engine tự vận hành như vLLM, TensorRT-LLM hay Text Generation Inference; chính README của SGLang ghi đã học thiết kế từ vLLM và vài dự án khác [1]. Bài không so sánh hiệu năng vì không có phép đo độc lập; tiêu chí nên là mô hình mục tiêu, đầu ra có cấu trúc, gateway và mức tài liệu hóa bảo mật.

API đám mây có hợp đồng xử lý dữ liệu phù hợp thì đơn giản về vận hành, nhưng dữ liệu bệnh án rời bệnh viện và cần đánh giá pháp lý kỹ. Gateway SGLang có thể chuyển tiếp ra backend tương thích OpenAI bên ngoài và giữ lịch sử tại chỗ [7], nhưng nội dung từng yêu cầu vẫn đi ra ngoài.

Phương án hay bị quên là không dùng LLM: biểu mẫu điện tử có cấu trúc ngay từ khâu nhập liệu, mẫu câu soạn sẵn và trích xuất theo quy tắc có thể đáp ứng phần lớn nhu cầu với rủi ro thấp hơn. LLM chỉ nên được chọn khi tóm tắt ghi chép tự do thật sự là nút thắt.

Không nên dùng SGLang khi nào

Không nên dùng khi thiếu GPU được hỗ trợ và người vận hành, khi cần sẵn chính sách công bố lỗ hổng chính thức trước khi mua sắm, hoặc khi kỳ vọng hệ thống tự ra quyết định lâm sàng. Đầu ra có cấu trúc bảo đảm cú pháp theo ràng buộc [10], không bảo đảm nội dung đúng.

Nhịp thay đổi nhanh là rủi ro vận hành: lệnh cài dùng gói tiền phát hành [1], torch.compile đã ngoài bảo trì [8], và tài liệu diffusion khuyên luôn đo trên đúng phần cứng, tải thật trước khi chốt mặc định cho production [4]. Số liệu trong blog hay tài liệu không thay cho phép đo của chính tổ chức.

Gateway cũng có giới hạn được thừa nhận: khi chạy nhiều replica, cây radix và giới hạn tần suất không đồng bộ; tài liệu ước tính tỷ lệ trúng cache giảm khoảng 10 đến 20 phần trăm, còn hạn mức chỉ áp theo từng replica [7]. Hệ thống cần hạn mức toàn cục chính xác phải bổ sung cơ chế ở tầng khác.

Thử nghiệm ba pha trên hồ sơ đã khử định danh

Pha 1, khoảng bốn tuần, chạy offline: lấy chừng 300 hồ sơ ra viện đã khử định danh từ hai chuyên khoa, nhờ bác sĩ viết bản tóm tắt chuẩn làm đáp án. Đo tỷ lệ JSON hợp lệ, tỷ lệ trường khớp đáp án, số lỗi nghiêm trọng như sai thuốc, sai liều, bỏ sót dị ứng, và thời gian sinh mỗi bản.

Pha 2, bốn đến sáu tuần, chạy song song ở một khoa: bản nháp hiện cạnh quy trình cũ nhưng không lưu vào HIS; đo thời gian hoàn thành giấy ra viện, mức chỉnh sửa và phản hồi của bác sĩ. Kèm theo là kiểm thử bảo mật: gọi gateway không có khóa, gọi thẳng worker từ mạng người dùng, rà log và thư mục bộ đệm.

Pha 3 chỉ bắt đầu khi pha 2 đạt: bác sĩ dùng bản nháp trong quy trình thật nhưng phải ký trước khi lưu, và bộ phận quản lý chất lượng rà ngẫu nhiên hồ sơ mỗi tuần.

Dừng khi có lỗi nghiêm trọng lọt qua bước duyệt, nội dung bệnh án xuất hiện trong log hoặc bộ đệm trái chính sách, bác sĩ không tiết kiệm được thời gian, hoặc kiểm thử bảo mật thất bại. Ngưỡng cụ thể do hội đồng chuyên môn đặt trước và không đổi giữa chừng.

Kết luận: tốc độ nhờ bộ đệm, độ tin cậy nhờ quy trình

Tài liệu SGLang mô tả rõ ba điểm mạnh: bộ đệm tiền tố dựa trên cây radix mở rộng được nhiều tầng, đầu ra có cấu trúc với nhiều backend ngữ pháp, và một gateway có định tuyến, cơ chế tin cậy, khả năng quan sát [9][10][7]; mã nguồn phát hành theo Apache-2.0 [2].

Trong y tế, giá trị không nằm ở tốc độ sinh token mà ở việc dữ liệu ở lại bệnh viện, kết quả đúng định dạng và bác sĩ giữ quyền quyết định. Muốn vậy, các mặc định từ xác thực tới log và bộ đệm đều phải được rà lại.

Bước tiếp theo hợp lý là lập bảng kiểm dữ liệu lưu trú, chọn mô hình ứng viên và chạy pha offline. Nếu kết quả không vượt cách làm hiện tại, dừng lại cũng là một kết luận có giá trị.

Cách bài này được thực hiện

SGLang thuộc nhóm Mô hình và suy luận AI trong tuyển chọn 100 nghiên cứu ứng dụng mã nguồn mở xuất hiện trên GitHub Trending năm 2026. Trong kho lưu độc lập các danh sách Trending theo ngôn ngữ, dự án được ghi nhận 9 lần từ 06/02 đến 11/10/2026; quan sát làm bằng chứng là danh sách Python ngày 06/02/2026, vị trí 9 [12]. Kho chỉ có Python, Go, JavaScript, Swift và vắng ngày 03/09, 12/10, nên đây không phải Top 100 chính thức của GitHub.

Bằng chứng kỹ thuật lấy từ commit 4195980f5a3d1efd9d1ab5d8a6c368b94122c950 (commit và kiểm tra ngày 12/10/2026): README, LICENSE, hướng dẫn nhanh, tài liệu triển khai SGLang Diffusion, hai tài liệu đa nút, cùng năm tệp bổ sung về Model Gateway, tham số máy chủ, HiCache, đầu ra có cấu trúc và LICENSE của gateway [1][2][3][4][5][6][7][8][9][10][11]. Siêu dữ liệu GitHub cùng ngày ghi bản phát hành mới nhất là v0.5.21 (02/10/2026).

Bài là nghiên cứu tài liệu có hỗ trợ AI: SGLang không được cài, chạy hay đo; bài không phải công bố khoa học có phản biện và không thay cho tư vấn pháp lý y tế. Tình huống bệnh viện, bảng kiểm và kế hoạch thử nghiệm là đề xuất; con số về SGLang chỉ lấy từ tài liệu dự án và có ghi nguồn.

Xem mã nguồn SGLang trên GitHub

Khám phá nghiên cứu của BDSG Foundation

Trao đổi về ứng dụng công nghệ cho doanh nghiệp