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 làm việc AI có thể thực hiện đối với các dự án mới là tận dụng khả năng suy luận không có máy chủ khi thích hợp. Theo truyền thống, các mô hình AI cần GPU chuyên dụng để chạy 24/7 và được trả tiền theo giờ. Với các điểm cuối suy luận không có máy chủ, các nhóm có tùy chọn sử dụng nhiều mô hình nguồn mở trên cơ sở trả tiền cho mỗi mã thông báo thay vì trả tiền theo giờ và tự quản lý việc thiết lập cũng như 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 mức sử dụng và quy mô của họ khi cần thiết.
Mặc dù kiến trúc không có máy chủ đã tồn tại được một thời gian nhưng các nhóm có mô hình tùy chỉnh hoặc tinh chỉnh vẫn thường trả mức phí hàng giờ cho việc sử dụng GPU. Tuy nhiên, có thể lưu trữ các mô hình được tinh chỉnh và phân phối chúng thông qua điểm cuối không có máy chủ với tính năng thanh toán trả cho mỗi mã thông báo. Chúng ta sẽ tìm hiểu cách có thể lưu trữ các mô hình được tinh chỉnh không cần máy chủ cũng như những lợi ích và tác hại khi làm như vậy.
Bài học chính
- Các phương pháp tinh chỉnh tham số hiệu quả như LoRA giúp việc lưu trữ các mô hình tùy chỉnh không cần máy chủ trở nên thiết thực bằng cách tạo ra các trọng lượng bộ điều hợp nhỏ có thể được xếp lớp lên trên mô hình cơ sở cố định, dùng chung. Đ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ể được tinh chỉnh từ một GPU duy nhất, loại bỏ nhu cầu triển khai riêng cho từng mô hình.
- Các nhóm có lưu lượng truy cập tăng đột biến hoặc không thể đoán trước có thể giảm chi phí suy luận bằng cách chuyển sang các điểm cuối được tinh chỉnh không có máy chủ, chỉ trả tiền cho các mã thông báo mà họ sử dụng thay vì chạy GPU suốt ngày đêm. Quá trình triển khai cũng nhanh hơn vì việc tải bộ chuyển đổi đã được đào tạo lên nền tảng được quản lý sẽ tạo ra điểm cuối API trực tiếp trong vài phút mà không cần thiết lập cơ sở hạ tầng.
- Sự cân bằng chính của suy luận serverless với các mô hình tinh chỉnh là khởi động nguội, trong đó bộ chuyển đổi không hoạt động phải được tải lại từ bộ lưu trữ trước khi có thể phân phát yêu cầu, làm tăng thêm độ trễ lên tới 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 duy trì định kỳ và độ trễ nhỏ hơn so với khởi động nguội mô hình đầy đủ vì chỉ cần tìm nạp trọng lượng bộ điều hợp nhẹ.
Các phương pháp tinh chỉnh được hỗ trợ
Điều quan trọng cần làm rõ ở đây là khi chúng tôi nói "tinh chỉnh" trong ngữ cảnh này, chúng tôi không có nghĩa là tinh chỉnh hoàn toàn theo kiểu truyền thống, trong đó tất cả các trọng số của mô hình đều được đào tạo lại từ đầu trên dữ liệu mới. Việc tinh chỉnh hoàn toàn rất tốn kém, mất thời gian và tạo ra một mô hình hoàn toàn mới có kích thước tương đương với mô hình ban đầu. Việc lưu trữ mô hình đó không có máy chủ là không thực tế vì nó không thể được chia sẻ giữa nhiều người dùng khác nhau. Nó yêu cầu triển khai GPU chuyên dụng riêng.
Tinh chỉnh tham số hiệu quả (PEFT) chỉ cập nhật một tập hợp con nhỏ các trọng số thay vì đào tạo lại tất cả các trọng số, khiến mô hình ban đầu bị đóng băng. Điều này tạo ra một tập hợp trọng số bổ sung nhỏ hơn nhiều đại diện cho các tùy chỉnh, trong khi mô hình cơ bản nặng vẫn không thay đổi và có thể chia sẻ với nhiều người dùng khác nhau, không liên quan.
Phương pháp PEFT được sử dụng rộng rãi nhất là Thích ứng cấp thấp (LoRA). Thay vì sửa đổi trực tiếp các trọng số hiện có của mô hình, LoRA bổ sung thêm các ma trận bộ điều hợp nhỏ có thể huấn luyện được bên trên mô hình cơ sở cố định. Các bộ điều hợp này nắm bắt hành vi của từng tác vụ cụ thể chỉ với trọng số vài megabyte, so với hàng chục hoặc hàng trăm gigabyte của chính mô hình cơ sở. LoRA cũng có nhiều 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 suy luận không có máy chủ.
Vì mô hình cơ sở được cố định và giống hệt nhau đối với tất cả người dùng nên nền tảng có thể tải mô hình đó một lần vào bộ nhớ GPU và chia sẻ mô hình đó. Sau đó, bộ điều hợp LoRA của mỗi người dùng có thể được tải lên trên cùng theo thời gian yêu cầu, giúp việc phục vụ hàng trăm biến thể được tinh chỉnh từ một GPU trở nên thiết thực. Điều quan trọng cần lưu ý là các nền tảng hỗ trợ suy luận không có máy chủ trên các mô hình được tinh chỉnh thường chỉ hỗ trợ suy luận đó với các mô hình cơ sở cụ thể. Vì vậy, bạn cần có bộ điều hợp LoRA đã được đào tạo về một trong các mẫu cơ sở được hỗ trợ của họ.
Quản lý nhiều bộ điều hợp LoRA
Trọng lượng của bộ điều hợp LoRA (thường từ 10 đến 100 MB mỗi bộ) được lưu trữ trong bộ lưu trữ đối tượng nhanh hoặc bộ nhớ đệm trong bộ nhớ do máy chủ suy luận quản lý. Khi có yêu cầu về một bộ chuyển đổi cụ thể, hệ thống phân phối sẽ tìm nạp các trọng số đó và kết hợp chúng vào đường chuyển tiếp một cách nhanh chóng.
Quá trình hợp nhất này rất nhẹ. Tại mỗi lớp biến áp áp dụng LoRA, bộ điều hợp sẽ thêm hai ma trận nhỏ tạo ra hiệu chỉnh thứ hạng thấp cho đầu ra của lớp. Trong quá trình suy luận, máy chủ tính toán đầu ra của lớp cơ sở, sau đó thêm hiệu chỉnh LoRA trong một số thao tác CUDA bổ sung. Trọng lượng cơ sở không bao giờ được sửa đổi, do đó, việc hoán đổi bộ điều hợp giữa các yêu cầu chỉ yêu cầu thay thế các cặp ma trận nhỏ đó trong thanh ghi GPU, thay vì tải lại mô hình cơ sở hoặc khởi động lại hạt nhân CUDA.
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 bộ điều hợp hoạt động trên một phiên bản duy nhất. Máy chủ suy luận cần duy trì một bộ nhớ đệm nhỏ chứa trọng lượng bộ điều hợp được sử dụng gần đây nhất và thường xuyên nhất trực tiếp trong VRAM. Các bộ điều hợp khác bị loại bỏ khỏi VRAM và được lưu trở lại vào RAM CPU hoặc bộ lưu trữ đối tượng, gây ra thời gian tải lại bị phạt vài trăm mili giây.
Quá trình tạo khối có thể khác nhau tùy theo phương pháp LoRA được sử dụng. Các yêu cầu chia sẻ bộ điều hợp thường được nhóm thành các lô phụ trước khi chạy hiệu chỉnh cho từng nhóm phụ, nhưng một số hệ thống, như S-LoRA, đóng gói các yêu cầu từ các bộ điều hợp khác nhau vào cùng một lượt chuyển tiếp và lưu trữ các bộ điều hợp hoạt động trong một nhóm bộ nhớ hợp nhất, sau đó giải quyết chúng bằng nhân CUDA tùy chỉnh có thể áp dụng các hiệu chỉnh bộ điều hợp khác nhau cho các vị trí trình tự khác nhau cùng một lúc. Cách tiếp cận này đôi khi được gọi là ghép kênh LoRA. Nó cho phép GPU duy trì trạng thái bão hòa ngay cả khi lưu lượng truy cập trải rộng trên nhiều biến thể được tinh chỉnh khác nhau cùng một lúc. vLLM cũng hỗ trợ ghép kênh LoRA nguyên bản cho những người dùng quan tâm đến việc hoán đổi bộ điều hợp LoRA trên GPU mà họ đang thuê hàng giờ.
Các mục trong bộ đệm KV được ghép nối với bộ chuyển đổi đã tạo ra chúng. Không thể sử dụng lại mục bộ nhớ đệm được tạo bằng một bộ điều hợp cho yêu cầu sử dụng bộ điều hợp khác. Điều này cuối cùng dẫn đến tỷ lệ trúng bộ đệm KV trong cài đặt nhiều bộ chuyển đổi thấp hơn so với triển khai một mô hình và máy chủ suy luận phải khóa các mục bộ nhớ đệm bằng cả mã thông báo nhắc của yêu cầu và mã định danh bộ điều hợp.
Tác động thực sự của việc sử dụng tính năng tinh chỉnh serverless
Điểm mạnh của việc tinh chỉnh không có máy chủ là rõ ràng nhất đối với các nhóm đang xây dựng các dịch vụ mới có lưu lượng truy cập không nhất quán, đến mức không cần thiết hoặc không tiết kiệm chi phí khi phải có GPU dự trữ chạy 24/7. Thay vì trả mức giá GPU cố định cho số giờ nhàn rỗi qua đêm, bạn chỉ trả tiền cho mã thông báo từ yêu cầu của mình. Bằng cách chuyển sang kiến trúc không có máy chủ, bạn có thể cắt giảm đáng kể chi phí suy luận.
Tốc độ triển khai cũng nhanh hơn rất nhiều. Sau khi bộ điều hợp LoRA của bạn được huấn luyện, việc tải bộ điều hợp lên nền tảng suy luận được quản lý sẽ tạo ra điểm cuối API trực tiếp trong vài phút mà không cần cung cấp cụm, điều phối vùng chứa hoặc quản lý trình điều khiển GPU. Điều này giúp đơn giản hóa gánh nặng về cơ sở hạ tầng, giúp 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ì quyền kiểm soát hành vi của mô hình và sở hữu trọng số của bộ chuyển đổi ngay cả khi mô hình cơ sở được dùng chung và chạy hiệu quả với giá cả phải chăng.
Nhược điểm lớn nhất của việc lưu trữ các mô hình tinh chỉnh không cần máy chủ là khởi động nguội. Khi bộ chuyển đổi không nhận được lưu lượng truy cập trong một khoảng thời gian, các nền tảng suy luận thường chia tỷ lệ về 0, loại bỏ các trọng số khỏi bộ nhớ GPU và lấy lại VRAM cho những người dùng khác. Điều này có nghĩa là người dùng tiếp theo phải đợi trong khi hệ thống tìm nạp các trọng số từ bộ lưu trữ đối tượng, tải chúng và bắt đầu chuyển tiếp. Quá trình này thường mất khoảng vài trăm mili giây thay vì vài giây vì bộ điều hợp có kích thước nhỏ. Xin lưu ý rằng nếu mô hình cơ sở không được sử dụng thường xuyên và bản thân nó đã bị loại bỏ, điều này có thể xảy ra trên một số kiến trúc, thì quá trình khởi động nguội có thể mất nhiều thời gian hơn. Quá trình khởi động nguội đặc biệt làm tăng đột biến Thời gian tạo mã thông báo đầu tiên (TTFT) mà không ảnh hưởng đến Thời gian trên mỗi đầu ra-Mã thông báo, tốc độ mã thông báo được tạo sau mã thông báo đầu tiên. TTFT là chỉ số cần theo dõi đối với các nhóm đang cố gắng giảm thiểu độ trễ phát trực tuyến.
Khởi động nguội có thể được giảm thiểu theo một số cách. Đầu tiên, kiến trúc có thể được thiết lập để gửi các yêu cầu duy trì định kỳ trong thời gian lưu lượng truy cập thấp. Thứ hai, có thể thực hiện các bước khi huấn luyện bộ điều hợp LoRA để tải nó hiệu quả hơn. Trong quá trình đào tạo, kích thước và khả năng biểu đạt của bộ điều hợp được kiểm soát bởi siêu tham số có tên là xếp hạng hoặc 'r'. Bộ chuyển đổi hạng 8 tạo ra khoảng một nửa các tham số có thể huấn luyện được của bộ chuyển đổi hạng 16. Bộ điều hợp cấp 8 sẽ có TTFT nhanh hơn khi bắt đầu nguội nếu tất cả các yếu tố khác đều bằng nhau. Ngoài ra, các lớp biến áp LoRA được áp dụng để thay đổi kích thước tệp và chi phí suy luận. LoRA thường được áp dụng cho các ma trận chiếu truy vấn và giá trị trong mỗi khối chú ý, nhưng việc áp dụng nó cho các lớp MLP (Multi-layer-perceptron) có thể cải thiện chất lượng khi cố gắng điều chỉnh mô hình cho phù hợp với một miền cụ thể.
Kết luận
Có khả năng suy luận tinh chỉnh không cần máy chủ sẽ là sản phẩm ngày càng phổ biến trong tương lai. Bối cảnh LLM hiện tại tập trung chủ yếu vào việc mở rộng các mô hình nguyên khối lớn hơn, lý luận tốt hơn. Người ta ít chú ý hơn đến các kiến trúc có nhiều mô hình chuyên biệt làm việc cùng nhau. Cuối cùng, cộng đồng sẽ tìm ra những cách tốt hơn để quản lý nhiều mô hình và trường hợp sử dụng mà loại kiến trúc này hoạt động tốt. Khi điều đó xảy ra, tính năng ghép kênh LoRA sẽ hữu ích cho các nhóm muốn quản lý nhiều tác nhân tùy chỉnh với chi phí hợp lý.
Bạn vẫn đang tìm kiếm câu trả lời?
Tác phẩm này được cấp phép theo Giấy phép quốc tế Creative Commons Ghi công-NonCommercial-ShareAlike 4.0.