API suy luận LLM 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ể sử dụng API này để thực hiện nhiều tác vụ, 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 tính 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 ứng dụng iOS.
Để nhanh chóng thêm API suy luận LLM vào ứng dụng iOS, hãy làm theo hướng dẫn Bắt đầu nhanh. Để biết ví dụ cơ bản về một ứng dụng iOS chạy API suy luận LLM, hãy xem ứng dụng mẫu. Để hiểu rõ hơn về cách hoạt động của API suy luận LLM, hãy tham khảo các phần tuỳ chọn cấu hình, chuyển đổi mô hình và điều chỉnh LORa.
Bạn có thể xem cách thực hiện nhiệm vụ này thông qua màn hình minh hoạ MediaPipe Studio. Để biết thêm thông tin về các tính năng, mô hình và tuỳ 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 API suy luận LLM vào ứng dụng iOS.
API suy luận LLM 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 và không yêu cầu thiết lập bổ sung theo 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
bằng các pod cần thiết cho ứng dụng, hãy tham khảo phần Sử dụng CocoaPods.
Thêm phần phụ thuộc
Thêm nhóm MediaPipeTasksGenai
trong 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 lượng tử hoá 8 bit từ Mô hình Kaggle. Để 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 phần 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 tuỳ 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 nội dung trả lời bằng văn bản. Thao tác này sẽ tạo ra một phản hồi được tạo.
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à ví dụ về một ứng dụng tạo văn bản cơ bản dành cho iOS, sử dụng API suy luận LLM. Bạn có thể sử dụng ứng dụng này làm điểm xuất phát 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 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
Sử dụng các tuỳ chọn cấu hình sau để thiết lập ứ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 các dự đoán ở k mã thông báo có nhiều khả năng 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 độ cao hơn sẽ tạo ra văn bản sáng tạo hơn, trong khi nhiệt độ thấp hơn sẽ tạo ra văn bản dễ dự đoán hơn. | Số thực dấu phẩy động | 0,8 |
randomSeed |
Giá trị khởi tạo 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 cục bộ trên thiết bị. Lưu ý: tính năng này chỉ tương thích với các mẫu GPU. | ĐƯỜNG DẪN | Không áp dụng |
Lập mô hình lượt chuyển đổi
API suy luận LLM tương thích với các loại mô hình sau đây, một số mô hình trong đó yêu cầu chuyển đổi mô hình. Sử dụng bảng để xác định phương thứ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ả mô hình LLM PyTorch | Thư viện AI Edge Torch Generative | 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
API suy luận LLM hỗ trợ điều chỉnh LoRA (Thích ứng thứ hạng thấp) bằng cách sử dụng thư viện PEFT (Điều chỉnh tinh vi hiệu quả theo tham số). Tính năng điều chỉnh LoRA tuỳ chỉnh hành vi của LLM thông qua một quy trình huấn luyện hiệu quả về chi phí, tạo một tập hợp 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.
API suy luận LLM hỗ trợ 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 thức LoRA của PEFT để huấn luyện mô hình LoRA được tinh chỉnh trên tập dữ liệu của riêng bạn.
API suy luận LLM chỉ hỗ trợ LoRA trên các lớp chú ý, vì vậy, chỉ 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.
Lập mô hình lượt chuyển đổi
Sử dụng Gói Python MediaPipe để chuyển đổi trọng số của mô hình sang định dạng Flatbuffer. ConversionConfig
chỉ định các tuỳ chọn mô hình cơ sở cùng với các tuỳ 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 tệp cho mô hình cơ sở và một tệp cho mô hình LoRA.
Suy luận mô hình LoRA
iOS hỗ trợ LoRA tĩnh trong quá trình khởi chạy. Để tải 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()
giống như mô hình cơ sở.