Hướng dẫn dự đoán LLM

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ị. 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 tích hợp sẵn tính năng hỗ trợ 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 và sản phẩm của mình.

Hãy dùng thử!

Tác vụ này hỗ trợ các biến thể sau của Gemma: Gemma-2 2B, Gemma 2B và Gemma 7B. Gemma là một gia đình gồm các mô hình mở, hiện đại và gọn nhẹ được xây dựng từ cùng một nghiên cứu và công nghệ dùng để tạo ra các mô hình Gemini. Công cụ này cũng hỗ trợ các mô hình bên ngoài sau: Phi-2, Falcon-RW-1BStableLM-3B.

Ngoài các mô hình được hỗ trợ gốc, người dùng có thể liên kết các mô hình khác bằng cách sử dụng các dịch vụ AI Edge của Google (bao gồm cả liên kết các mô hình PyTorch). Điều này cho phép người dùng xuất mô hình đã liên kết sang các mô hình TensorFlow Lite nhiều chữ ký, được đóng gói với các tham số trình tạo mã thông báo để tạo Gói tác vụ.

Bắt đầu

Bắt đầu sử dụng nhiệm vụ này bằng cách làm theo một trong các hướng dẫn triển khai sau cho nền tảng mục tiêu của bạn. Các hướng dẫn dành riêng cho nền tảng này sẽ hướng dẫn bạn cách triển khai cơ bản của nhiệm vụ này, với các mã ví dụ sử dụng mô hình có sẵn và các tuỳ chọn cấu hình được đề xuất:

Thông tin chi tiết về việc cần làm

Phần này mô tả các chức năng, dữ liệu đầu vào, đầu ra và các tuỳ chọn cấu hình của nhiệm vụ này.

Tính năng

API suy luận LLM có các tính năng chính sau đây:

  1. Tạo văn bản từ văn bản – Tạo văn bản dựa trên câu lệnh văn bản đầu vào.
  2. Lựa chọn LLM – Áp dụng nhiều mô hình để điều chỉnh ứng dụng cho phù hợp với các trường hợp sử dụng cụ thể của bạn. Bạn cũng có thể huấn luyện lại và áp dụng trọng số tuỳ chỉnh cho mô hình.
  3. Hỗ trợ LoRA – Mở rộng và tuỳ chỉnh chức năng LLM bằng mô hình LoRA bằng cách huấn luyện trên tất cả tập dữ liệu của bạn hoặc lấy các mô hình LoRA được tạo sẵn từ cộng đồng nguồn mở (chỉ dành cho mô hình gốc).
Dữ liệu đầu vào của việc cần làm Kết quả đầu ra của việc cần làm
API suy luận LLM chấp nhận các dữ liệu đầu vào sau:
  • Câu lệnh dạng văn bản (ví dụ: câu hỏi, tiêu đề email, tài liệu cần tóm tắt)
API suy luận LLM cho ra các kết quả sau:
  • Văn bản được tạo dựa trên câu lệnh nhập (ví dụ: câu trả lời cho câu hỏi, email nháp, bản tóm tắt tài liệu)

Tuỳ chọn cấu hình

Tác vụ này có các tuỳ chọn cấu hình sau:

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ô hình GPU. ĐƯỜNG DẪN Không áp dụng
resultListener Đặt trình nghe kết quả để nhận kết quả một cách không đồng bộ. Chỉ áp dụng khi sử dụng phương thức tạo không đồng bộ. Không áp dụng Không áp dụng
errorListener Đặt trình nghe lỗi không bắt buộc. Không áp dụng Không áp dụng

Mô hình

API suy luận LLM có tính năng hỗ trợ tích hợp cho các mô hình ngôn ngữ lớn dạng văn bản sang văn bản có thể tách biệt, được tối ưu hoá để chạy trên trình duyệt và thiết bị di động. Bạn có thể tải các mô hình nhẹ này xuống để chạy các phép suy luận hoàn toàn trên thiết bị.

Trước khi khởi chạy API suy luận LLM, hãy tải một trong các mô hình được hỗ trợ xuống và lưu trữ tệp đó trong thư mục dự án.

Gemma-2 2B

Gemma-2 2B là mô hình mới nhất trong gia đình Gemma gồm các mô hình mở, hiện đại và nhẹ được xây dựng từ cùng một nghiên cứu và công nghệ dùng để tạo các mô hình Gemini. Mô hình này chứa các thông số 2B và trọng số mở. Gemma-2 2B nổi tiếng với kỹ năng lập luận vượt trội cho các mô hình trong lớp.

Tải Gemma-2 2B xuống

Các mô hình Gemma-2 2B có các biến thể sau:

Bạn cũng có thể điều chỉnh mô hình và thêm trọng số mới trước khi thêm mô hình đó vào ứng dụng. Để biết thêm thông tin về cách điều chỉnh và tuỳ chỉnh Gemma, hãy xem phần Điều chỉnh Gemma. Sau khi tải Gemma xuống từ Kaggle Mô hình, mô hình này đã ở định dạng thích hợp để sử dụng với MediaPipe Tasks.

Gemma 2B

Gemma 2B là một phần của một nhóm mô hình mở, hiện đại và gọn nhẹ được xây dựng từ cùng một nghiên cứu và công nghệ dùng để tạo ra các mô hình Gemini. Mô hình này chứa các tham số 2B và trọng số mở. Mô hình này phù hợp với nhiều nhiệm vụ tạo văn bản, bao gồm cả việc trả lời câu hỏi, tóm tắt và suy luận.

Tải Gemma 2B xuống

Các mô hình Gemma 2B có các biến thể sau:

Bạn cũng có thể điều chỉnh mô hình và thêm trọng số mới trước khi thêm mô hình đó vào ứng dụng. Để biết thêm thông tin về cách điều chỉnh và tuỳ chỉnh Gemma, hãy xem phần Điều chỉnh Gemma. Sau khi tải Gemma xuống từ Kaggle Models, mô hình này đã ở định dạng thích hợp để sử dụng với MediaPipe Tasks.

Gemma 7B

Gemma 7B là một mô hình Gemma lớn hơn với các tham số 7B và trọng số mở. Mô hình này hiệu quả hơn cho nhiều nhiệm vụ tạo văn bản, bao gồm cả việc trả lời câu hỏi, tóm tắt và suy luận. Gemma 7B chỉ được hỗ trợ trên web.

Tải Gemma 7B xuống

Mô hình Gemma 7B có một biến thể:

Sau khi tải Gemma xuống từ Kaggle Models,mô hình đã có ở định dạng phù hợp để sử dụng với MediaPipe.

Falcon 1B

Falcon-1B là mô hình chỉ giải mã nhân quả có 1 tỷ tham số được huấn luyện trên 350 tỷ mã thông báo của RefinedWeb.

Tải Falcon 1B xuống

API suy luận LLM yêu cầu tải xuống và lưu trữ cục bộ các tệp sau:

  • tokenizer.json
  • tokenizer_config.json
  • pytorch_model.bin

Sau khi tải các tệp mô hình Falcon xuống, bạn có thể chuyển đổi mô hình sang định dạng MediaPipe. Làm theo các bước trong phần Chuyển đổi mô hình sang định dạng MediaPipe.

StableLM 3B

StableLM-3B là mô hình ngôn ngữ chỉ gồm bộ giải mã gồm 3 tỷ tham số được huấn luyện trước trên 1 nghìn tỷ mã thông báo của các tập dữ liệu mã và tiếng Anh đa dạng trong 4 khoảng thời gian bắt đầu của hệ thống.

Tải StableLM 3B xuống

API suy luận LLM yêu cầu tải các tệp sau xuống và lưu trữ cục bộ:

  • tokenizer.json
  • tokenizer_config.json
  • model.safetensors

Sau khi tải các tệp mô hình StableLM xuống, bạn có thể chuyển đổi mô hình sang định dạng MediaPipe. Làm theo các bước trong phần Chuyển đổi mô hình sang định dạng MediaPipe.

Phi-2

Phi-2 là một mô hình Transformer có 2,7 tỷ tham số. Mô hình này được huấn luyện bằng nhiều văn bản tổng hợp NLP và các trang web được lọc. Mô hình này phù hợp nhất với các câu lệnh sử dụng định dạng Câu hỏi-Câu trả lời, trò chuyện và mã.

Tải Phi-2 xuống

API suy luận LLM yêu cầu tải các tệp sau xuống và lưu trữ cục bộ:

  • tokenizer.json
  • tokenizer_config.json
  • model-00001-of-00002.safetensors
  • model-00002-of-00002.safetensors

Sau khi tải các tệp mô hình Phi-2 xuống, bạn có thể chuyển đổi mô hình sang định dạng MediaPipe. Làm theo các bước trong phần Chuyển đổi mô hình sang định dạng MediaPipe.

Mô hình đã xuất của AI Edge

AI Edge là một sản phẩm của Google cho phép bạn chuyển đổi các mô hình do người dùng liên kết thành mô hình TensorFlow Lite nhiều chữ ký. Để biết thêm thông tin chi tiết về cách liên kết và xuất mô hình, hãy truy cập vào trang GitHub của AI Edge Torch.

Sau khi xuất mô hình sang định dạng TFLite, bạn có thể chuyển đổi mô hình sang định dạng MediaPipe. Để biết thêm thông tin, hãy xem phần Chuyển đổi mô hình sang định dạng MediaPipe.

Chuyển đổi mô hình sang định dạng MediaPipe

Chuyển đổi mô hình gốc

Nếu bạn đang sử dụng LLM bên ngoài (Phi-2, Falcon hoặc StableLM) hoặc phiên bản Gemma không phải Kaggle, hãy sử dụng tập lệnh chuyển đổi của chúng tôi để định dạng mô hình sao cho tương thích với MediaPipe.

Quá trình chuyển đổi mô hình yêu cầu gói MediaPipe PyPI. Tập lệnh chuyển đổi có trong tất cả các gói MediaPipe sau 0.10.11.

Cài đặt và nhập các phần phụ thuộc bằng cách sau:

$ python3 -m pip install mediapipe

Sử dụng thư viện genai.converter để chuyển đổi mô hình:

import mediapipe as mp
from mediapipe.tasks.python.genai import converter

config = converter.ConversionConfig(
  input_ckpt=INPUT_CKPT,
  ckpt_format=CKPT_FORMAT,
  model_type=MODEL_TYPE,
  backend=BACKEND,
  output_dir=OUTPUT_DIR,
  combine_file_only=False,
  vocab_model_file=VOCAB_MODEL_FILE,
  output_tflite_file=OUTPUT_TFLITE_FILE,
)

converter.convert_checkpoint(config)

Để chuyển đổi mô hình LoRA, ConversionConfig phải chỉ định các tuỳ chọn mô hình cơ sở cũng như các tuỳ chọn LoRA khác. Lưu ý rằng vì API chỉ hỗ trợ suy luận LoRA với GPU, nên bạn phải đặt phần phụ trợ thành 'gpu'.

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_TFLITE_FILE,
)

converter.convert_checkpoint(config)

Trình chuyển đổi sẽ xuất ra hai tệp flatbuffer TFLite, một tệp cho mô hình cơ sở và tệp còn lại cho mô hình LoRA.

Thông số Mô tả Giá trị được chấp nhận
input_ckpt Đường dẫn đến tệp model.safetensors hoặc pytorch.bin. Xin lưu ý rằng đôi khi định dạng Safetensor của mô hình được phân đoạn thành nhiều tệp, ví dụ: model-00001-of-00003.safetensors, model-00001-of-00003.safetensors. Bạn có thể chỉ định một mẫu tệp, chẳng hạn như model*.safetensors. ĐƯỜNG DẪN
ckpt_format Định dạng tệp mô hình. {"safetensors", "pytorch"}
model_type LLM đang được chuyển đổi. {"PHI_2", "FALCON_RW_1B", "STABLELM_4E1T_3B", "GEMMA_2B", "GEMMA_7B", "GEMMA-2_2B"}
backend Bộ xử lý (đại diện) dùng để chạy mô hình. {"cpu", "gpu"}
output_dir Đường dẫn đến thư mục đầu ra lưu trữ các tệp trọng số mỗi lớp. ĐƯỜNG DẪN
output_tflite_file Đường dẫn đến tệp đầu ra. Ví dụ: "model_cpu.bin" hoặc "model_gpu.bin". Tệp này chỉ tương thích với API suy luận LLM và không thể dùng làm tệp `tflite` chung. ĐƯỜNG DẪN
vocab_model_file Đường dẫn đến thư mục lưu trữ các tệp tokenizer.jsontokenizer_config.json. Đối với Gemma, hãy trỏ đến tệp tokenizer.model duy nhất. ĐƯỜNG DẪN
lora_ckpt Đường dẫn đến tệp LoRA ckpt của safetytensors có lưu trữ trọng số của bộ chuyển đổi LoRA. ĐƯỜNG DẪN
lora_rank Một số nguyên đại diện cho thứ hạng của ckpt LoRA. Bắt buộc để chuyển đổi trọng số lora. Nếu bạn không cung cấp, thì trình chuyển đổi sẽ giả định không có trọng số LoRA. Lưu ý: Chỉ phần phụ trợ GPU mới hỗ trợ LoRA. Số nguyên
lora_output_tflite_file Tên tệp tflite đầu ra cho các trọng số LoRA. ĐƯỜNG DẪN

Chuyển đổi mô hình AI Edge

Nếu bạn đang sử dụng một LLM được liên kết với một mô hình TFLite thông qua AI Edge, hãy sử dụng tập lệnh nhóm để tạo Gói tác vụ. Quy trình đóng gói sẽ đóng gói mô hình đã liên kết với siêu dữ liệu bổ sung (ví dụ: Tham số trình tạo mã thông báo) cần thiết để chạy quy trình suy luận toàn diện.

Quy trình đóng gói mô hình yêu cầu gói MediaPipe PyPI. Tập lệnh chuyển đổi có sẵn trong tất cả các gói MediaPipe sau 0.10.14.

Cài đặt và nhập các phần phụ thuộc bằng cách làm như sau:

$ python3 -m pip install mediapipe

Sử dụng thư viện genai.bundler để gói mô hình:

import mediapipe as mp
from mediapipe.tasks.python.genai import bundler

config = bundler.BundleConfig(
    tflite_model=TFLITE_MODEL,
    tokenizer_model=TOKENIZER_MODEL,
    start_token=START_TOKEN,
    stop_tokens=STOP_TOKENS,
    output_filename=OUTPUT_FILENAME,
    enable_bytes_to_unicode_mapping=ENABLE_BYTES_TO_UNICODE_MAPPING,
)
bundler.create_bundle(config)
Thông số Mô tả Giá trị được chấp nhận
tflite_model Đường dẫn đến mô hình TFLite đã xuất sang AI Edge. ĐƯỜNG DẪN
tokenizer_model Đường dẫn đến mô hình bộ phân tích cú pháp SentencePiece. ĐƯỜNG DẪN
start_token Mã thông báo bắt đầu cụ thể của mô hình. Mã thông báo bắt đầu phải có trong mô hình trình tạo mã thông báo được cung cấp. STRING
stop_tokens Mã thông báo điểm dừng cụ thể của mô hình. Mã thông báo dừng phải có trong mô hình trình tạo mã thông báo được cung cấp. LIST[STRING]
output_filename Tên của tệp gói tác vụ đầu ra. ĐƯỜNG DẪN

Tuỳ chỉnh LoRA

Bạn có thể định cấu hình API suy luận LLM Mediapipe để hỗ trợ Điều chỉnh thứ hạng thấp (LoRA) cho các mô hình ngôn ngữ lớn. Bằng cách sử dụng các mô hình LoRA được tinh chỉnh, nhà phát triển có thể tùy chỉnh hành vi của LLM thông qua một quy trình huấn luyện tiết kiệm chi phí.

Tính năng hỗ trợ LoRA của LLM suy luận API hoạt động với các mô hình Gemma-2B và Phi-2 cho phần phụ trợ GPU, trong đó trọng số LoRA chỉ áp dụng cho các lớp chú ý. Phương thức triển khai ban đầu này đóng vai trò là một API thử nghiệm cho các hoạt động phát triển trong tương lai, với kế hoạch hỗ trợ nhiều mô hình và nhiều loại lớp hơn trong các bản cập nhật sắp tới.

Chuẩn bị mô hình LoRA

Làm theo hướng dẫn trên HuggingFace để 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 với các loại mô hình được hỗ trợ, Gemma-2B hoặc Phi-2. Cả mô hình Gemma-2B và Phi-2 đều có trên HuggingFace ở định dạng safetensors. Vì API suy luận LLM chỉ hỗ trợ LoRA trên các lớp chú ý, nên chỉ chỉ định các lớp chú ý trong khi tạo LoraConfig như sau:

# For Gemma-2B
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"],
)

Để thử nghiệm, có các mô hình LoRA được tinh chỉnh công khai phù hợp với API suy luận LLM có trên HuggingFace. Ví dụ: monsterapi/gemma-2b-lora-maths-orca-200k cho Gemma-2B và lole25/phi-2-sft-ultrachat-lora cho Phi-2.

Sau khi huấn luyện trên tập dữ liệu đã chuẩn bị và lưu mô hình, bạn sẽ nhận được một tệp adapter_model.safetensors chứa các trọng số mô hình LoRA được tinh chỉnh. Tệp safetensors là điểm kiểm tra LoRA được dùng trong quá trình chuyển đổi mô hình.

Ở bước tiếp theo, bạn cần chuyển đổi trọng số của mô hình thành TensorFlow Lite Flatbuffer bằng Gói Python MediaPipe. ConversionConfig phải chỉ định các tuỳ chọn mô hình cơ sở cũng như các tuỳ chọn LoRA bổ sung. Xin lưu ý rằng vì API chỉ hỗ trợ suy luận LoRA bằng GPU, nên bạn phải đặt phần phụ trợ thành 'gpu'.

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_TFLITE_FILE,
)

converter.convert_checkpoint(config)

Trình chuyển đổi sẽ xuất ra hai tệp flatbuffer TFLite, một tệp cho mô hình cơ sở và tệp còn lại cho mô hình LoRA.

Suy luận mô hình LoRA

API suy luận LLM cho web, Android và iOS được cập nhật để hỗ trợ suy luận mô hình LoRA. Web hỗ trợ LoRA động, có thể chuyển đổi các mô hình LoRA khác nhau trong thời gian chạy. Android và iOS hỗ trợ LoRA tĩnh, sử dụng cùng một trọng số LoRA trong suốt thời gian hoạt động của tác vụ.

Android hỗ trợ LoRA tĩnh trong quá trình khởi chạy. Để tải mô hình LoRA, người dùng sẽ chỉ định đường dẫn mô hình LoRA cũng như LLM cơ sở.

// Set the configuration options for the LLM Inference task
val options = LlmInferenceOptions.builder()
        .setModelPath('<path to base model>')
        .setMaxTokens(1000)
        .setTopK(40)
        .setTemperature(0.8)
        .setRandomSeed(101)
        .setLoraPath('<path to LoRA model>')
        .build()

// Create an instance of the LLM Inference task
llmInference = LlmInference.createFromOptions(context, options)

Để chạy dự đoán LLM bằng LoRA, hãy sử dụng cùng các phương thức generateResponse() hoặc generateResponseAsync() làm mô hình cơ sở.