从OpenAI批量嵌入作业获取数据失败及利用率优化咨询
批量嵌入30万+产品描述的问题解决:输出文件读取崩溃与效率优化
一、解决输出文件读取内核崩溃的问题
直接调用client.files.content(output_file_id).content会把整个输出文件的二进制内容一次性加载到内存,3万多条嵌入结果的体积大概率会撑爆当前内核的内存,导致崩溃。换成分块读取的方式,逐段写入本地文件即可解决:
import openai client = openai.OpenAI() # 分块读取并保存到本地文件 with open("embeddings_output.jsonl", "wb") as local_file: for chunk in client.files.content(output_file_id).iter_bytes(chunk_size=8192): local_file.write(chunk)
每次仅读取8KB的内容块,逐步写入本地,完全避免内存过载问题。之后直接读取本地的jsonl文件处理嵌入结果即可。
二、最大化利用批量嵌入能力
text-embedding-ada-002单批量作业最多支持90000条请求,而批量队列总上限为300万条。你当前每批仅放入34337条,远未用满单批上限,建议调整每批大小至90000条:
- 30万条描述只需拆成4批(3个9万条批次+1个3万条批次),大幅减少作业数量,降低管理成本
- 注意单个批量作业的jsonl文件不能超过512MB,拆分前可估算单条请求的平均大小,确保9万条的文件体积不超限
- 队列总容量300万,完全能容纳30万条描述的所有批次,不存在冲突
另外,还能进一步优化请求结构:每个请求的body中,input支持传入字符串数组,可将多条产品描述打包进同一个请求。示例如下:
{"custom_id": "batch-request-0", "method": "POST", "url": "/v1/embeddings", "body": {"model": "text-embedding-ada-002", "input": ["Base Líquida Maybelline Superstay 24 Horas...", "Sandália Havaianas Top Animals...", ...], "encoding_format": "float"}}
这样一个请求可处理多条描述(注意单请求的token总数不超过8191),单批能容纳的总描述数会更多,进一步压缩批量作业数量,提升效率。
内容的提问来源于stack exchange,提问作者Marcio Bernardo
相关产品推荐
相关产品推荐

