Tích hợp backend Transformers trong SGLang
Tích hợp backend Transformers trong SGLang
- 5 min read
Tích hợp backend Transformers trong SGLang
Thư viện Hugging Face Transformers là tiêu chuẩn để làm việc với các mô hình hiện đại nhất - từ thử nghiệm với các nghiên cứu tiên tiến đến tinh chỉnh trên dữ liệu tùy chỉnh. Sự đơn giản, linh hoạt và kho mô hình mở rộng của nó làm cho nó trở thành một công cụ mạnh mẽ để phát triển nhanh chóng.
Nhưng khi bạn đã sẵn sàng chuyển từ notebook sang sản xuất, hiệu suất suy luận trở nên cực kỳ quan trọng. Đó là lúc SGLang xuất hiện.
Được thiết kế để suy luận thông lượng cao, độ trễ thấp, SGLang hiện cung cấp tích hợp liền mạch với Transformers làm backend. Điều này có nghĩa là bạn có thể kết hợp sự linh hoạt của Transformers với hiệu suất thô của SGLang.
Hãy đi sâu vào những gì tích hợp này cho phép và cách bạn có thể sử dụng nó.
Tóm tắt
SGLang hiện hỗ trợ Hugging Face Transformers làm backend, cho phép bạn chạy bất kỳ mô hình tương thích Transformers nào với suy luận hiệu suất cao ngay lập tức.
import sglang as sgl
llm = sgl.Engine("meta-llama/Llama-3.2-1B-Instruct", impl="transformers")
print(llm.generate(["Thủ đô của Pháp là"], {"max_new_tokens": 20})[0])
Không cần hỗ trợ gốc - SGLang tự động quay lại Transformers khi cần, hoặc bạn có thể đặt impl="transformers" một cách rõ ràng.
Transformers và SGLang
Hãy xem qua một ví dụ tạo văn bản đơn giản với meta-llama/Llama-3.2-1B-Instruct để so sánh cả hai phương pháp.
Transformers
Thư viện Transformers rất tuyệt vời cho thử nghiệm, các tác vụ quy mô nhỏ và đào tạo, nhưng nó không được tối ưu hóa cho các tình huống khối lượng lớn hoặc độ trễ thấp.
from transformers import pipeline
pipe = pipeline("text-generation", model="meta-llama/Llama-3.2-1B-Instruct")
generate_kwargs = {
"top_p": 0.95,
"top_k": 20,
"temperature": 0.8,
"max_new_tokens": 256
}
result = pipe("Tương lai của AI là", **generate_kwargs)
print(result[0]["generated_text"])
SGLang
SGLang đi theo một hướng khác, ưu tiên hiệu quả với các tính năng như RadixAttention (một cơ chế chú ý tiết kiệm bộ nhớ). Suy luận với SGLang nhanh hơn và tiết kiệm tài nguyên hơn đáng kể, đặc biệt là khi tải. Đây là cùng một tác vụ trong SGLang bằng cách sử dụng một engine ngoại tuyến:
import sglang as sgl
if __name__ == '__main__':
llm = sgl.Engine(model_path="meta-llama/Llama-3.2-1B-Instruct")
prompts = ["Tương lai của AI là"]
sampling_params = {
"top_p": 0.95,
"top_k": 20,
"temperature": 0.8,
"max_new_tokens": 256
}
outputs = llm.generate(prompts, sampling_params)
print(outputs[0])
Hoặc bạn có thể quay một máy chủ và gửi yêu cầu:
python3 -m sglang.launch_server \
--model-path meta-llama/Llama-3.2-1B-Instruct \
--host 0.0.0.0 \
--port 30000
response = requests.post(
"http://localhost:30000/generate",
json={
"text": "Tương lai của AI là",
"sampling_params": {
"top_p": 0.95,
"top_k": 20,
"temperature": 0.8,
"max_new_tokens": 256
},
},
)
print(response.json())
Lưu ý rằng SGLang cũng cung cấp API tương thích với OpenAI, làm cho nó trở thành một sự thay thế trực tiếp cho các dịch vụ bên ngoài.
Backend Transformers trong SGLang
Với tích hợp backend Transformers mới, SGLang hiện có thể tự động quay lại sử dụng các mô hình Transformers mà nó không hỗ trợ gốc. Điều này có nghĩa là trong thực tế:
- Truy cập tức thì vào các mô hình mới được thêm vào Transformers
- Hỗ trợ cho các mô hình tùy chỉnh từ Hugging Face Hub
- Ít chi phí kỹ thuật hơn
Điều này mở ra suy luận nhanh hơn và triển khai được tối ưu hóa (ví dụ: cho phép RadixAttention) mà không làm mất đi sự đơn giản và linh hoạt của hệ sinh thái Transformers.
Cách sử dụng
llm = sgl.Engine(model_path="meta-llama/Llama-3.2-1B-Instruct", impl="transformers")
Lưu ý rằng việc chỉ định tham số impl là tùy chọn. Nếu mô hình không được hỗ trợ gốc bởi SGLang, nó sẽ tự chuyển sang triển khai Transformers.
Bất kỳ mô hình nào trên Hugging Face Hub hoạt động với transformers bằng cách sử dụng trust_remote_code=True và triển khai chú ý một cách thích hợp đều tương thích với SGLang. Bạn có thể tìm thấy các yêu cầu chính xác trong tài liệu chính thức. Nếu mô hình tùy chỉnh của bạn đáp ứng các tiêu chí này, tất cả những gì bạn cần làm là đặt trust_remote_code=True khi tải nó.
llm = sgl.Engine(model_path="new-custom-transformers-model", impl="transformers", trust_remote_code=True)
Ví dụ
Helium của Kyutai Team chưa được SGLang hỗ trợ gốc. Đây là nơi backend Transformers tỏa sáng, cho phép suy luận được tối ưu hóa mà không cần chờ đợi hỗ trợ gốc.
python3 -m sglang.launch_server \
--model-path kyutai/helium-1-preview-2b \
--impl transformers \
--host 0.0.0.0 \
--port 30000
response = requests.post(
"http://localhost:30000/generate",
json={
"text": "Thủ đô của Pháp là",
"sampling_params": {
"top_p": 0.95,
"top_k": 20,
"temperature": 0.8,
"max_new_tokens": 256
},
},
)
print(response.json())
Các bước tiếp theo
Có một số lĩnh vực quan trọng mà chúng tôi đang tích cực làm việc để tăng cường tích hợp này:
- Cải thiện hiệu suất: Các mô hình Transformer hiện đang tụt hậu so với tích hợp gốc về hiệu suất. Mục tiêu chính của chúng tôi là tối ưu hóa và thu hẹp khoảng cách này.
- Hỗ trợ LoRA
- Tích hợp VLM: chúng tôi cũng đang làm việc để thêm hỗ trợ cho các Mô hình Ngôn ngữ Thị giác (VLM) để mở rộng phạm vi khả năng và trường hợp sử dụng.
Link bài viết gốc
- Tags:
- Ai
- June 23, 2025
- Huggingface.co