创建批量推理接入点后,通过batch Inference chat接口,使用批量推理服务,详情请参见批量推理说明。
当前支持Go语言SDK,其他语言的SDK待上线。
批量推理接入点调用方法与在线推理接入点类似。
您需要升级最新的SDK,并关注下面示例代码中的变更。
timeout
。client.StartBatchWorker()
方法。client.CreateBatchChatCompletion
方法。package main import ( "context" "fmt" "os" "sync" "time" "github.com/volcengine/volcengine-go-sdk/service/arkruntime" "github.com/volcengine/volcengine-go-sdk/service/arkruntime/model" "github.com/volcengine/volcengine-go-sdk/volcengine" ) // main 函数是程序的入口点 func main() { // 设置超时时间为24小时 timeout := time.Hour * 24 // 设置工作线程数量为10000 workerNum := 10000 // 使用API密钥创建一个新的客户端实例,并设置超时时间 // 注意:这里的API密钥是从环境变量中获取的,设定超时时间 client := arkruntime.NewClientWithApiKey(os.Getenv("ARK_API_KEY"), arkruntime.WithTimeout(timeout)) // 启动指定数量的工作线程 client.StartBatchWorker(workerNum) // 创建一个上下文对象,用于控制请求的生命周期 ctx := context.Background() // 初始化工作线程索引 i := 0 // 设置每个工作线程要执行的任务数量 taskNum := 5 // 创建一个等待组,用于等待所有工作线程完成任务 wg := sync.WaitGroup{} // 循环启动工作线程 for i < workerNum { // 增加等待组的计数器 wg.Add(1) // 启动一个新的工作线程 go func(index int) { // 在工作线程结束时减少等待组的计数器 defer wg.Done() // 初始化任务索引 j := 0 // 循环执行任务 for j < taskNum { // 创建一个聊天完成请求 _, err := client.CreateBatchChatCompletion(ctx, model.ChatCompletionRequest{ // 从环境变量中读取,您批量推理请求的推理接入点 Model: os.Getenv("YOUR_ENDPOINT_ID"), // 设置请求的消息内容 Messages: []*model.ChatCompletionMessage{ { // 设置消息的角色为系统角色 Role: model.ChatMessageRoleSystem, // 设置消息的内容 Content: &model.ChatCompletionMessageContent{ // 设置消息的字符串值 StringValue: volcengine.String("你是豆包,是由字节跳动开发的 AI 人工智能助手"), }, }, { // 设置消息的角色为用户角色 Role: model.ChatMessageRoleUser, // 设置消息的内容 Content: &model.ChatCompletionMessageContent{ // 设置消息的字符串值 StringValue: volcengine.String("常见的十字花科植物有哪些?"), }, }, }, }) // 增加任务索引 j++ // 检查是否有错误发生 if err != nil { // 如果有错误,打印错误信息并继续下一个任务 fmt.Printf("worker %d request %d Fail Err %s\n", index, j, err) continue } } }(i) // 增加工作线程索引 i++ } // 等待所有工作线程完成任务 wg.Wait() }
BatchChat接口中,有以下核心配置:
timeout
在创建client
时,配置的arkruntime.WithTimeout(timeout)
的timeout值,代表着单个请求的超时时间。如果请求失败,client
会在超时时间范围内自动重试请求,或者按照方舟服务端要求暂停若干时间后重试。在方舟服务端,会根据负载对请求做出暂不处理、排队、指定客户端若干时间后重试等操作。
推荐配置一个较大的超时时间(最大可以配置72小时),可以更好的服务端繁忙时保证请求完成比例。配置更高的超时时间并不会降低请求的吞吐量。
workerNum
代表client向方舟服务端发起请求的最大并发数。在创建client后,需要在发起请求前,调用 client.StartBatchWorker(workerNum)
启动Client端的Worker。推荐业务参照示例代码,以相同的并发数调用 client.CreateBatchChatCompletion
方法,可。workNum决定了在服务端容量充足时,Client能达到的最大吞吐量。
需要综合考虑业务预期的最大峰值、平均时延、机器并发上线。
举例:业务预期的最大峰值QPS为5000,单个请求的平均延时为5秒,部署在2C4G的机器或容器上。
- 业务并发:
5000*5 = 25000
- 机器配置限制:不考虑业务层损耗,可支持1000至1500的QPS
如果需要应对业务峰值时的业务量,可部署更多副本(推荐),提升机器配置(不推荐)。
建议的副本数为:5000/1000=5
。
每个副本上设置的请求并发数(workerNum
)为1000*5=5000