Giới thiệu
Một trong những bước tiết kiệm chi phí lớn nhất mà các nhóm quy trình AI có thể thực hiện cho các dự án mới là tận dụng serverless inference khi phù hợp. Truyền thống, các mô hình AI cần một GPU dedicated chạy 24/7 trả tiền theo giờ. Với các endpoint inference serverless, các nhóm có tùy chọn sử dụng nhiều mô hình open source trên cơ sở pay-per-token thay vì trả tiền theo giờ và tự quản lý thiết lập và bảo trì. Điều này đã giảm chi phí để chạy một sản phẩm mới vì nó cho phép các nhóm chỉ trả tiền cho việc sử dụng của họ và scale khi cần thiết.
Mặc dù kiến trúc serverless đã tồn tại một thời gian, các nhóm với các mô hình tùy chỉnh hoặc fine-tuned thường vẫn trả mức giá theo giờ cho việc sử dụng GPU. Tuy nhiên, hoàn toàn có thể host các mô hình fine-tuned và phục vụ chúng thông qua một endpoint serverless với thanh toán pay-per-token. Chúng ta sẽ đi qua cách host fine-tuned models serverlessly và các lợi ích cũng như nhược điểm của việc làm như vậy.
Các điểm chính
- Các phương pháp fine-tuning hiệu quả về tham số như LoRA làm cho việc host các mô hình tùy chỉnh serverless trở nên thực tế bằng cách tạo ra các adapter weights nhỏ có thể xếp chồng lên một base model được chia sẻ, frozen. Điều này có nghĩa là các nền tảng có thể phục vụ hàng trăm biến thể fine-tuned từ một GPU đơn lẻ, loại bỏ nhu cầu triển khai dedicated cho từng mô hình.
- Các nhóm có traffic nhạy bén hoặc không thể dự đoán có thể giảm chi phí inference bằng cách chuyển sang fine-tuned endpoints serverless, chỉ trả tiền cho các token họ sử dụng thay vì chạy GPU quanh năm. Triển khai cũng nhanh hơn, vì việc tải một trained adapter lên nền tảng được quản lý tạo ra một live API endpoint trong vài phút mà không cần thiết lập hạ tầng.
- Đánh đổi chính của serverless inference với fine-tuned models là cold starts, nơi một adapter rảnh phải được tải lại từ storage trước khi có thể phục vụ yêu cầu, thêm độ trễ lên đến vài trăm mili-giây. Điều này có thể được giảm thiểu bằng các yêu cầu keep-alive định kỳ, và độ trễ nhỏ hơn cold start của toàn bộ mô hình vì chỉ cần tải các adapter weights nhẹ.
Các phương pháp Fine-tuning được hỗ trợ
Điều quan trọng cần làm rõ ở đây là khi chúng ta nói "fine-tuning" trong bối cảnh này, chúng ta không có nghĩa là fine-tuning truyền thống đầy đủ, nơi tất cả các weights của mô hình được train lại từ đầu trên dữ liệu mới. Full fine-tuning tốn kém, tốn thời gian, và tạo ra một mô hình hoàn toàn mới to bằng mô hình gốc. Host mô hình đó serverless là không thực tế vì nó không thể được chia sẻ qua nhiều người dùng khác nhau. Nó yêu cầu triển khai GPU dedicated riêng.
Parameter-efficient fine-tuning (PEFT) chỉ cập nhật một tập hợp nhỏ các weights thay vì train lại tất cả, để base model gốc frozen. Điều này tạo ra một tập hợp weights phụ nhỏ hơn nhiều đại diện cho các tùy chỉnh, trong khi base model nặng vẫn không đổi và có thể chia sẻ qua nhiều người dùng không liên quan.
Phương pháp PEFT được sử dụng rộng rãi nhất là Low-Rank Adaptation (LoRA). Thay vì sửa đổi weights hiện có của mô hình trực tiếp, LoRA thêm các ma trận adapter nhỏ có thể train trên đầu base model frozen. Những adapter này nắm bắt hành vi cụ thể cho tác vụ chỉ trong vài megabytes weights, so với hàng chục hoặc hàng trăm gigabytes của chính base model. LoRA cũng có một số biến thể, bao gồm QLoRA, DoRA, và LoRA+, tất cả đều được hỗ trợ rộng rãi bởi các nền tảng serverless inference.
Vì base model frozen và giống hệt nhau qua tất cả người dùng, một nền tảng có thể tải nó một lần vào GPU memory và chia sẻ. Adapter LoRA của mỗi người dùng sau đó có thể được tải lên trên lúc request time, làm cho việc phục vụ hàng trăm biến thể fine-tuned từ một GPU đơn lẻ trở nên thực tế. Cũng quan trọng cần lưu ý rằng các nền tảng hỗ trợ serverless inference trên fine-tuned models, thường chỉ hỗ trợ nó với các base model cụ thể. Vì vậy bạn cần có một LoRA adapter đã được train trên một trong các base model được hỗ trợ của họ.
Quản lý nhiều LoRA Adapters
Các LoRA adapter weights (thường giữa 10-100 MB mỗi cái) được lưu trữ trong fast object storage hoặc một in-memory cache được quản lý bởi inference server. Khi một yêu cầu đến cho một adapter cụ thể, hệ thống phục vụ lấy những weights đó và fuse chúng vào forward pass on the fly.
Quá trình fusion này nhẹ. Tại mỗi transformer layer nơi LoRA được áp dụng, adapter thêm hai ma trận nhỏ tạo ra một correction low-rank cho đầu ra của layer. Trong quá trình inference, server tính toán đầu ra của base layer, sau đó thêm correction LoRA trong một vài thao tác CUDA thêm. Base weights không bao giờ bị sửa đổi, vì vậy việc hoán đổi adapters giữa các yêu cầu chỉ yêu cầu thay thế các cặp ma trận nhỏ đó trong GPU registers, thay vì tải lại base model hoặc khởi động lại CUDA kernel.
Một trong những thách thức lớn nhất là quản lý bộ nhớ với hàng trăm adapters làm việc trên một instance đơn lẻ. Inference server cần duy trì một resident cache nhỏ của các adapter weights được sử dụng gần đây và thường xuyên nhất trực tiếp trong VRAM. Các adapters khác bị evict từ VRAM và lưu trữ trở lại trong CPU RAM hoặc object storage, gây ra penalty reload time vài trăm mili-giây.
Quy trình batching có thể khác nhau tùy thuộc vào phương pháp LoRA được sử dụng. Các yêu cầu chia sẻ một adapter thường được nhóm thành sub-batches trước khi correction cho mỗi sub-group được chạy, nhưng một số hệ thống, như S-LoRA, pack các yêu cầu từ các adapters khác nhau vào cùng một forward pass và lưu trữ active adapters trong một unified memory pool, sau đó định địa chỉ chúng với custom CUDA kernels có thể áp dụng các adapter corrections khác nhau cho các vị trí sequence khác nhau cùng lúc. Cách tiếp cận này đôi khi được gọi là LoRA multiplexing. Nó cho phép GPU vẫn saturated ngay cả khi traffic phân tán qua nhiều biến thể fine-tuned khác nhau cùng một lúc. vLLM cũng hỗ trợ LoRA multiplexing natively cho những người dùng quan tâm đến việc hoán đổi LoRA adapters trên GPU họ thuê theo giờ.
Các KV-cache entries được gắn liền với adapter tạo ra chúng. Một cache entry được tạo với một adapter không thể được tái sử dụng cho một yêu cầu sử dụng adapter khác. Điều này cuối cùng dẫn đến KV-cache hit rate thấp hơn trong cài đặt multi-adapter so với triển khai single-model, và inference servers phải key cache entries bằng cả prompt tokens của yêu cầu và adapter identifier.
Tác động thực tế của việc sử dụng Serverless Fine-tuning
Các điểm mạnh của serverless fine-tuning rõ ràng nhất cho các nhóm đang xây dựng các dịch vụ mới có các đợt traffic nhạy bén không nhất quán sao cho không cần thiết hoặc không hiệu quả về chi phí để có reserved GPUs chạy 24/7. Thay vì trả mức giá GPU-hour cố định cho các giờ rảnh qua đêm, bạn chỉ trả tiền cho token từ các yêu cầu của mình. Bằng cách chuyển sang kiến trúc serverless, bạn có thể cắt giảm chi phí inference một order of magnitude.
Tốc độ triển khai cũng nhanh hơn nhiều. Một khi LoRA adapter của bạn được train, tải nó lên managed inference platform tạo ra một live API endpoint trong vài phút, không cần cluster provisioning, container orchestration, hay GPU driver management. Điều này đơn giản hóa gánh nặng hạ tầng, giải phóng nhóm của bạn để tập trung vào mô hình và sản phẩm. Bạn vẫn có thể duy trì kiểm soát hành vi của mô hình, và bạn sở hữu adapter weights ngay cả khi base model được chia sẻ và chạy hiệu quả và giá rẻ.
Nhược điểm lớn nhất của việc host fine-tuned models serverlessly là cold start. Khi một adapter không nhận traffic trong một khoảng thời gian, các nền tảng inference thường scale nó xuống zero, evict weights khỏi GPU memory, và reclaim VRAM cho người dùng khác. Điều này có nghĩa là người dùng tiếp theo phải chờ trong khi hệ thống lấy weights từ object storage, tải chúng, và bắt đầu forward pass. Thường mất khoảng vài trăm mili-giây, thay vì vài giây, vì các adapters nhỏ. Là một lưu ý, nếu base model không được sử dụng thường xuyên và chính nó bị evict, điều này có thể xảy ra trên một số kiến trúc, cold starts có thể mất lâu hơn. Cold starts cụ thể làm tăng Time-to-First-Token (TTFT) mà không ảnh hưởng đến Time-per-Output-Token, tốc độ tạo token sau token đầu tiên. TTFT là metric cần theo dõi cho các nhóm cố gắng giảm thiểu streaming latency.
Cold starts có thể được giảm thiểu theo một vài cách. Thứ nhất, kiến trúc có thể được thiết lập để gửi các keep-alive requests định kỳ trong thời gian traffic thấp. Thứ hai, các bước có thể được thực hiện khi train LoRA adapter để làm cho việc tải nó hiệu quả hơn. Trong quá trình train, kích thước và tính biểu đạt của một adapter được kiểm soát bởi một hyperparameter gọi là rank hoặc 'r'. Một adapter rank-8 tạo ra khoảng một nửa trainable parameters của một adapter rank-16. Một adapter rank-8 sẽ có TTFT nhanh hơn từ cold start nếu tất cả các yếu tố khác bằng nhau. Ngoài ra, các transformer layers LoRA được áp dụng thay đổi kích thước file và inference overhead. LoRA thường được áp dụng cho query và value projection matrices trong mỗi attention block, nhưng áp dụng nó cho các MLP (Multi-layer-perceptron) layers có thể cải thiện chất lượng khi cố gắng adapt mô hình cho một domain cụ thể.
Kết luận
Có thể serverless fine-tuned inference sẽ trở thành một ưu tiên phổ biến hơn trong tương lai. Cảnh quan LLM hiện tại tập trung nhiều vào việc scale các mô hình monolithic lớn hơn, lý luận tốt hơn. Ít sự chú ý hơn đã được dành cho các kiến trúc với nhiều specialist models làm việc cùng nhau. Cuối cùng, cộng đồng sẽ tìm ra các cách tốt hơn để quản lý nhiều mô hình và các trường hợp sử dụng nơi kiến trúc loại này hoạt động tốt. Khi đó xảy ra, LoRA multiplexing sẽ hữu ích cho các nhóm muốn quản lý nhiều custom agents với chi phí hợp lý.
Vẫn đang tìm kiếm câu trả lời?
Bản 작업 này được cấp phép theo Giấy phép Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International.