You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Vertex AI TextEmbeddingModel的延迟问题及预热方案咨询

Vertex AI TextEmbeddingModel 初始调用延迟优化:预热方案

问题背景

使用Vertex AI的TextEmbeddingModel计算嵌入向量时,首次调用延迟远高于后续调用(如测试中首次耗时1.35秒,后续仅0.12秒左右),确认该现象并非上下文缓存导致(sdk_encode为单次独立调用),需要通过系统预热降低初始请求延迟。

测试代码及输出

import time
import google.generativeai as genai
from vertexai.language_models import TextEmbeddingInput, TextEmbeddingModel
base_model_name = "text-embedding-004"
EMBED_TASK_TYPE = "RETRIEVAL_QUERY"

text_embedding_model = TextEmbeddingModel.from_pretrained(base_model_name)
model = TextEmbeddingModel.from_pretrained(base_model_name)

def sdk_encode( text):
        inputs = [TextEmbeddingInput(text.lower(), EMBED_TASK_TYPE) ]
        kwargs = {}
        embeddings = model.get_embeddings(inputs, **kwargs)
        text_embeddings = [embedding.values for embedding in embeddings]
        return text_embeddings[0] if len(text_embeddings) == 1 else text_embeddings

queries = ["I want to take pto Monday", "I want to take pto Tuesday", "I want to take pto Friday"]
for i in range(3): 
    query = queries[i]
    start_time = time.time()
    sdk_encode(query)
    end_time = time.time()
    sdk_delay = end_time - start_time
    print(f"Vertext SDK Latency for {query}: {sdk_delay}")

输出:

Vertext SDK Latency for I want to take pto Monday: 1.3506088256835938
Vertext SDK Latency for I want to take pto Tuesday: 0.12767696380615234
Vertext SDK Latency for I want to take pto Friday: 0.12481999397277832

核心原因

首次调用时需要完成模型资源加载、API连接握手、认证流程初始化等一次性操作,这些步骤会产生额外延迟;后续调用则复用已建立的连接和加载的模型,因此耗时大幅降低。

预热解决方案

1. 启动阶段执行预热调用

在模型初始化完成后,立即发起一个简单的测试调用,提前消耗初始化延迟,确保实际业务请求时模型已处于就绪状态。

修改后的示例代码:

import time
import google.generativeai as genai
from vertexai.language_models import TextEmbeddingInput, TextEmbeddingModel
base_model_name = "text-embedding-004"
EMBED_TASK_TYPE = "RETRIEVAL_QUERY"

# 仅初始化一次模型实例(移除重复初始化)
model = TextEmbeddingModel.from_pretrained(base_model_name)

# 预热函数:触发模型加载与连接建立
def warm_up_model():
    test_input = [TextEmbeddingInput("warmup", EMBED_TASK_TYPE)]
    model.get_embeddings(test_input)
    print("模型预热完成")

# 启动时执行预热
warm_up_model()

def sdk_encode(text):
        inputs = [TextEmbeddingInput(text.lower(), EMBED_TASK_TYPE) ]
        embeddings = model.get_embeddings(inputs)
        text_embeddings = [embedding.values for embedding in embeddings]
        return text_embeddings[0] if len(text_embeddings) == 1 else text_embeddings

queries = ["I want to take pto Monday", "I want to take pto Tuesday", "I want to take pto Friday"]
for i in range(3): 
    query = queries[i]
    start_time = time.time()
    sdk_encode(query)
    end_time = time.time()
    sdk_delay = end_time - start_time
    print(f"Vertex SDK Latency for {query}: {sdk_delay}")

2. 复用模型实例

原代码中重复初始化了两次TextEmbeddingModel.from_pretrained,这会额外增加资源加载开销。确保全局仅初始化一次模型实例并复用,避免重复执行加载流程。

3. 优化客户端连接配置

通过配置客户端选项,提前建立并维持与Vertex AI服务的连接,减少首次调用的握手延迟。示例如下:

from google.api_core.client_options import ClientOptions

# 替换为你的服务区域对应的endpoint
client_options = ClientOptions(api_endpoint="us-central1-aiplatform.googleapis.com")
model = TextEmbeddingModel.from_pretrained(base_model_name, client_options=client_options)

4. 生产环境:利用Vertex AI端点预热功能

如果是生产部署场景,可在创建模型端点时配置warmup_requests参数,提交模拟请求让服务提前加载模型并保持就绪状态,避免实际流量到达时的初始延迟。

内容的提问来源于stack exchange,提问作者user1848018

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 11:23:15