Tối ưu hoá tốc độ suy luận bằng tính năng lưu vào bộ nhớ đệm tiền tố

Lưu trữ vào bộ nhớ đệm tiền tố là một tính năng giúp giảm thời gian suy luận bằng cách lưu trữ và sử dụng lại trạng thái LLM trung gian của quá trình xử lý một phần tiền tố lời nhắc dùng chung và định kỳ. Để bật tính năng lưu vào bộ nhớ đệm theo tiền tố, bạn chỉ cần tách tiền tố tĩnh khỏi hậu tố động trong yêu cầu API.

Tính năng lưu vào bộ nhớ đệm tiền tố hiện chỉ hỗ trợ dữ liệu đầu vào dạng văn bản, vì vậy, bạn không nên sử dụng tính năng này nếu đang cung cấp hình ảnh trong câu lệnh.

Có hai cách để triển khai tính năng lưu vào bộ nhớ đệm tiền tố: ngầm ẩn hoặc tường minh:

Sử dụng tính năng lưu vào bộ nhớ đệm theo tiền tố một cách gián tiếp

Để bật tính năng lưu vào bộ nhớ đệm tiền tố, hãy thêm phần dùng chung của câu lệnh vào trường promptPrefix, như minh hoạ trong các đoạn mã sau:

Kotlin

val promptPrefix = "Reverse the given sentence: "
val dynamicSuffix = "Hello World"

val result = generativeModel.generateContent(
  generateContentRequest(TextPart(dynamicSuffix)) {
    promptPrefix = PromptPrefix(promptPrefix)
  }
)

Java

String promptPrefix = "Reverse the given sentence: ";
String dynamicSuffix = "Hello World";

GenerateContentResponse response = generativeModelFutures.generateContent(
    new GenerateContentRequest.Builder(new TextPart(dynamicSuffix))
    .setPromptPrefix(new PromptPrefix(promptPrefix))
    .build())
    .get();

Trong đoạn mã trước, dynamicSuffix được truyền dưới dạng nội dung chính và promptPrefix được cung cấp riêng.

Mức tăng hiệu suất ước tính

Không có tính năng lưu tiền tố vào bộ nhớ đệm

Với lượt truy cập bộ nhớ đệm tiền tố

(Có thể xảy ra lỗi không tìm thấy trong bộ nhớ đệm tiền tố khi tiền tố được dùng lần đầu)

Pixel 9 có tiền tố cố định gồm 300 mã thông báo và hậu tố động gồm 50 mã thông báo

0,82 giây

0,45 giây

Pixel 9 có tiền tố cố định gồm 1.000 mã thông báo và hậu tố động gồm 100 mã thông báo

2,11 giây

0,5 giây

Lưu ý về bộ nhớ

Với tính năng lưu vào bộ nhớ đệm tiền tố ngầm, các tệp bộ nhớ đệm sẽ được lưu vào bộ nhớ riêng của ứng dụng khách, điều này làm tăng mức sử dụng bộ nhớ của ứng dụng. Các tệp bộ nhớ đệm được mã hoá và siêu dữ liệu liên quan (bao gồm cả văn bản tiền tố ban đầu) sẽ được lưu trữ. Hãy lưu ý những điều sau đây về bộ nhớ:

  • Số lượng bộ nhớ đệm được quản lý bằng cơ chế LRU (Ít dùng gần đây nhất). Các bộ nhớ đệm ít được dùng nhất sẽ tự động bị xoá khi vượt quá tổng số lượng bộ nhớ đệm tối đa.
  • Kích thước bộ nhớ đệm của câu lệnh phụ thuộc vào độ dài của tiền tố.
  • Để xoá tất cả bộ nhớ đệm được tạo từ tính năng lưu vào bộ nhớ đệm theo tiền tố, hãy sử dụng phương thức generativeMode.clearImplicitCaches().

Sử dụng tính năng quản lý bộ nhớ đệm rõ ràng

Prompt API bao gồm các phương thức quản lý bộ nhớ đệm rõ ràng để giúp nhà phát triển kiểm soát chính xác hơn cách bộ nhớ đệm được tạo, tìm kiếm, sử dụng và xoá. Các thao tác thủ công này chạy độc lập với quy trình xử lý bộ nhớ đệm tự động của hệ thống.

Ví dụ này minh hoạ cách khởi chạy tính năng quản lý bộ nhớ đệm rõ ràng và thực hiện suy luận:

Kotlin

val cacheName = "my_cache"
val promptPrefix = "Reverse the given sentence: "
val dynamicSuffix = "Hello World"

// Create a cache
val cacheRequest = createCachedContextRequest(cacheName, PromptPrefix(promptPrefix))
val cache = generativeModel.caches.create(cacheRequest)

// Run inference with the cache
val response = generativeModel.generateContent(
  generateContentRequest(TextPart(dynamicSuffix)) {
    cachedContextName = cache.name
  }
)

Java

String cacheName = "my_cache";
String promptPrefix = "Reverse the given sentence: ";
String dynamicSuffix = "Hello World";

// Create a cache
CachedContext cache = cachesFutures.create(
  new CreateCachedContextRequest.Builder(cacheName, new PromptPrefix(promptPrefix))
  .build())
  .get();

// Run inference with the cache
GenerateContentResponse response = generativeModelFutures.generateContent(
  new GenerateContentRequest.Builder(new TextPart(dynamicSuffix))
  .setCachedContextName(cache.getName())
  .build())
  .get();

Ví dụ này minh hoạ cách truy vấn, truy xuất và xoá các bộ nhớ đệm được quản lý rõ ràng bằng cách sử dụng generativeModel.caches:

Kotlin

val cacheName = "my_cache"

// Query pre-created caches
for (cache in generativeModel.caches.list()) {
  // Do something with cache
}

// Get specific cache
val cache = generativeModel.caches.get(cacheName)

// Delete a pre-created cache
generativeModel.caches.delete(cacheName)

Java

String cacheName = "my_cache";

// Query pre-created caches
for (PrefixCache cache : cachesFutures.list().get()) {
  // Do something with cache
}

// Get specific cache
PrefixCache cache = cachesFutures.get(cacheName).get();

// Delete a pre-created cache
cachesFutures.delete(cacheName);