LLM Inference API cho phép bạn chạy các mô hình ngôn ngữ lớn (LLM) hoàn toàn trên thiết bị cho các ứng dụng iOS. Bạn có thể dùng API này để thực hiện nhiều việc, chẳng hạn như tạo văn bản, truy xuất thông tin ở dạng ngôn ngữ tự nhiên và tóm tắt tài liệu. Tác vụ này cung cấp khả năng hỗ trợ tích hợp cho nhiều mô hình ngôn ngữ lớn từ văn bản sang văn bản, nhờ đó, bạn có thể áp dụng các mô hình AI tạo sinh mới nhất trên thiết bị cho các ứng dụng iOS của mình.
Để nhanh chóng thêm LLM Inference API vào ứng dụng iOS, hãy làm theo hướng dẫn Bắt đầu nhanh. Để xem ví dụ cơ bản về một ứng dụng iOS chạy LLM Inference API, hãy xem ứng dụng mẫu. Để hiểu rõ hơn về cách hoạt động của LLM Inference API, hãy tham khảo các phần lựa chọn cấu hình, chuyển đổi mô hình và điều chỉnh LoRA.
Bạn có thể xem tác vụ này hoạt động trong bản minh hoạ MediaPipe Studio. Để biết thêm thông tin về các chức năng, mô hình và lựa chọn cấu hình của tác vụ này, hãy xem phần Tổng quan.
Bắt đầu nhanh
Hãy làm theo các bước sau để thêm LLM Inference API vào ứng dụng iOS.
LLM Inference API sử dụng thư viện MediaPipeTasksGenai. Bạn phải cài đặt thư viện này bằng CocoaPods. Thư viện này tương thích với cả ứng dụng Swift và Objective-C, đồng thời không yêu cầu thiết lập thêm cho từng ngôn ngữ.
Để biết hướng dẫn cài đặt CocoaPods trên macOS, hãy tham khảo hướng dẫn cài đặt CocoaPods.
Để biết hướng dẫn về cách tạo Podfile với các pod cần thiết cho ứng dụng của bạn, hãy tham khảo bài viết Sử dụng CocoaPods.
Thêm phần phụ thuộc
Thêm nhóm MediaPipeTasksGenai vào Podfile bằng mã sau:
target 'MyLlmInferenceApp' do
use_frameworks!
pod 'MediaPipeTasksGenAI'
pod 'MediaPipeTasksGenAIC'
end
Nếu ứng dụng của bạn có các mục tiêu kiểm thử đơn vị, hãy tham khảo Hướng dẫn thiết lập cho iOS để biết thêm thông tin về cách thiết lập Podfile.
Tải mô hình xuống
Tải Gemma-2 2B ở định dạng được lượng tử hoá 8 bit xuống từ Kaggle Models. Để biết thêm thông tin về các mô hình hiện có, hãy xem Tài liệu về mô hình.
Thêm mô hình vào thư mục dự án bằng Xcode. Để biết hướng dẫn về cách thêm tệp vào dự án Xcode, hãy tham khảo bài viết Quản lý tệp và thư mục trong dự án Xcode.
Khởi chạy tác vụ
Khởi chạy tác vụ bằng các lựa chọn cấu hình cơ bản:
import MediaPipeTasksGenai
let modelPath = Bundle.main.path(forResource: "model",
ofType: "bin")
let options = LlmInferenceOptions()
options.baseOptions.modelPath = modelPath
options.maxTokens = 1000
options.topk = 40
options.temperature = 0.8
options.randomSeed = 101
let llmInference = try LlmInference(options: options)
Chạy tác vụ
Sử dụng phương thức generateResponse(inputText:) để tạo một câu trả lời bằng văn bản. Thao tác này sẽ tạo ra một câu trả lời duy nhất.
let result = try LlmInference.generateResponse(inputText: inputPrompt)
Để truyền trực tuyến phản hồi, hãy sử dụng phương thức generateResponseAsync(inputText:).
let resultStream = LlmInference.generateResponseAsync(inputText: inputPrompt)
do {
for try await partialResult in resultStream {
print("\(partialResult)")
}
print("Done")
}
catch {
print("Response error: '\(error)")
}
Ứng dụng mẫu
Ứng dụng mẫu là một ví dụ về ứng dụng tạo văn bản cơ bản cho iOS, sử dụng LLM Inference API. Bạn có thể sử dụng ứng dụng này làm điểm bắt đầu cho ứng dụng iOS của riêng mình hoặc tham khảo ứng dụng này khi sửa đổi một ứng dụng hiện có. Mã ví dụ được lưu trữ trên GitHub.
Sao chép kho lưu trữ git bằng lệnh sau:
git clone https://github.com/google-ai-edge/mediapipe-samples
Sau khi tạo một phiên bản cục bộ của mã ví dụ, bạn có thể nhập dự án vào iOS Studio và chạy ứng dụng. Để biết thêm thông tin, hãy xem Hướng dẫn thiết lập cho iOS.
Các lựa chọn về cấu hình
Hãy dùng các lựa chọn cấu hình sau để thiết lập một ứng dụng iOS:
| Tên tuỳ chọn | Mô tả | Phạm vi giá trị | Giá trị mặc định |
|---|---|---|---|
modelPath |
Đường dẫn đến vị trí lưu trữ mô hình trong thư mục dự án. | ĐƯỜNG DẪN | Không áp dụng |
maxTokens |
Số lượng mã thông báo tối đa (mã thông báo đầu vào + mã thông báo đầu ra) mà mô hình xử lý. | Số nguyên | 512 |
topk |
Số lượng mã thông báo mà mô hình xem xét ở mỗi bước tạo. Giới hạn dự đoán ở k mã thông báo có khả năng xảy ra nhất. | Số nguyên | 40 |
temperature |
Mức độ ngẫu nhiên được đưa vào trong quá trình tạo. Nhiệt độ càng cao thì văn bản được tạo càng sáng tạo, còn nhiệt độ càng thấp thì văn bản được tạo càng dễ dự đoán. | Số thực dấu phẩy động | 0,8 |
randomSeed |
Dữ liệu gốc ngẫu nhiên được dùng trong quá trình tạo văn bản. | Số nguyên | 0 |
loraPath |
Đường dẫn tuyệt đối đến mô hình LoRA trên thiết bị. Lưu ý: chế độ này chỉ tương thích với các mô hình GPU. | ĐƯỜNG DẪN | Không áp dụng |
Chuyển đổi mô hình
LLM Inference API tương thích với các loại mô hình sau đây, một số loại yêu cầu chuyển đổi mô hình. Sử dụng bảng này để xác định phương thức gồm các bước bắt buộc cho mô hình của bạn.
| Mô hình | Phương thức chuyển đổi | Nền tảng tương thích | Loại tệp |
|---|---|---|---|
| Gemma-3 1B | Không cần chuyển đổi | Android, web | .task |
| Gemma 2B, Gemma 7B, Gemma-2 2B | Không cần chuyển đổi | Android, iOS, web | .bin |
| Phi-2, StableLM, Falcon | Tập lệnh chuyển đổi MediaPipe | Android, iOS, web | .bin |
| Tất cả các mô hình LLM PyTorch | Thư viện tạo LiteRT Torch | Android, iOS | .task |
Để tìm hiểu cách chuyển đổi các mô hình khác, hãy xem phần Chuyển đổi mô hình.
Tuỳ chỉnh LoRA
LLM Inference API hỗ trợ tinh chỉnh LoRA (Thích ứng cấp thấp) bằng cách sử dụng thư viện PEFT (Tinh chỉnh hiệu quả về tham số). Quá trình tinh chỉnh LoRA tuỳ chỉnh hành vi của LLM thông qua quy trình huấn luyện tiết kiệm chi phí, tạo một nhóm nhỏ các trọng số có thể huấn luyện dựa trên dữ liệu huấn luyện mới thay vì huấn luyện lại toàn bộ mô hình.
LLM Inference API hỗ trợ việc thêm trọng số LoRA vào các lớp chú ý của mô hình Gemma-2 2B, Gemma 2B và Phi-2. Tải mô hình xuống ở định dạng safetensors.
Mô hình cơ sở phải ở định dạng safetensors để tạo trọng số LoRA. Sau khi huấn luyện LoRA, bạn có thể chuyển đổi các mô hình thành định dạng FlatBuffers để chạy trên MediaPipe.
Chuẩn bị trọng số LoRA
Sử dụng hướng dẫn Phương pháp LoRA của PEFT để huấn luyện một mô hình LoRA được tinh chỉnh trên tập dữ liệu của riêng bạn.
LLM Inference API chỉ hỗ trợ LoRA trên các lớp chú ý, vì vậy, bạn chỉ cần chỉ định các lớp chú ý trong LoraConfig:
# For Gemma
from peft import LoraConfig
config = LoraConfig(
r=LORA_RANK,
target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],
)
# For Phi-2
config = LoraConfig(
r=LORA_RANK,
target_modules=["q_proj", "v_proj", "k_proj", "dense"],
)
Sau khi huấn luyện trên tập dữ liệu đã chuẩn bị và lưu mô hình, các trọng số mô hình LoRA được tinh chỉnh sẽ có trong adapter_model.safetensors. Tệp safetensors là điểm kiểm tra LoRA được dùng trong quá trình chuyển đổi mô hình.
Chuyển đổi mô hình
Sử dụng Gói Python MediaPipe để chuyển đổi trọng số mô hình thành định dạng Flatbuffer. ConversionConfig chỉ định các lựa chọn mô hình cơ sở cùng với các lựa chọn LoRA bổ sung.
import mediapipe as mp
from mediapipe.tasks.python.genai import converter
config = converter.ConversionConfig(
# Other params related to base model
...
# Must use gpu backend for LoRA conversion
backend='gpu',
# LoRA related params
lora_ckpt=LORA_CKPT,
lora_rank=LORA_RANK,
lora_output_tflite_file=LORA_OUTPUT_FILE,
)
converter.convert_checkpoint(config)
Trình chuyển đổi sẽ tạo ra hai tệp Flatbuffer, một cho mô hình cơ sở và một cho mô hình LoRA.
Suy luận mô hình LoRA
iOS hỗ trợ LoRA tĩnh trong quá trình khởi tạo. Để tải một mô hình LoRA, hãy chỉ định đường dẫn mô hình LoRA cũng như LLM cơ sở.
import MediaPipeTasksGenai
let modelPath = Bundle.main.path(forResource: "model",
ofType: "bin")
let loraPath= Bundle.main.path(forResource: "lora_model",
ofType: "bin")
let options = LlmInferenceOptions()
options.modelPath = modelPath
options.maxTokens = 1000
options.topk = 40
options.temperature = 0.8
options.randomSeed = 101
options.loraPath = loraPath
let llmInference = try LlmInference(options: options)
Để chạy suy luận LLM bằng LoRA, hãy sử dụng các phương thức generateResponse() hoặc generateResponseAsync() tương tự như mô hình cơ sở.