趁着ChatGPT官方API release的热度没消散,分享一下个人(穷逼)自用的快速迭代黑盒LLM工具包。

从2023年03月24日起,OpenAI停止了CODEX系列(即code-davinci)API的访问,意味着用户无法再获得这些API的免费使用权限。对此OpenAI欢迎各位迁移至gpt-3.5-turbo系列继续使用,它们也是驱动ChatGPT的后端。对此,openai-manager更新了对应的ChatCompletions接口。如果你有批量的免费体验账号,在openai-manager使用gpt-3.5-turbo系列API能避免触发免费账号的RateLimit限制,线性提高实验的吞吐量。

从2023年03月03日起,api.openai.com在内地全面被墙,内地用户请使用export OPENAI_API_PROXY设置可用代理以继续使用openai-manager。此外,自ChatCompletion API开放之后,CDEX API的生成速率也下降明显,且用且珍惜。

Background

在OpenAI所有开放的language completion API中,code-davinci系列是唯一可在Beta阶段免费使用的。但OpenAI在CODEX系列API上施加了很严格的频率限制,官方描述为20 requests/min和40000 tokens/min,以先到者为准。显然,这种限制严重拖慢了在大规模数据集上的验证!因此我用协程实现了一个带Rate Limit Control的生产者-消费者队列加速批量化提交OpenAI Request,支持多API_key并行。现在就去找伙伴们收集ChatGPT玩剩下的账号,狠狠加速你的黑盒LLM实验吧!

OpenAI API与ChatGPT共享账号体系,但互不干扰。

用法

openai-manager Github上提供了完整流程,一个快速开始的案例如下:

  1. pip install -U openai-manager
  2. 用环境变量或从YAML配置文件导入多个API_Key:

    OPENAI_API_KEY_1=sk-Nxo******
    OPENAI_API_KEY_2=sk-TG2******
    OPENAI_API_KEY_3=sk-Kpt******
    # You can set a global proxy for all api_keys
    OPENAI_API_PROXY=http://127.0.0.1:7890
    # You can also append proxy to each api_key. 
    # Make sure the indices match.
    OPENAI_API_PROXY_1=http://127.0.0.1:7890
    OPENAI_API_PROXY_2=http://127.0.0.1:7890
    OPENAI_API_PROXY_3=http://127.0.0.1:7890
  3. 开始提交!建议每次不超过1024个prompt:

    import openai_manager
    
    prompt = "Once upon a time, "
    prompts = [prompt] * 10
    responses = openai_manager.Completion.create(
        model="code-davinci-002",
        prompt=prompts,
        max_tokens=20,
    )
    # 注意,当前实现下responses和openai-python不同,responses是一个List[dict];
    # 但是responses保证回复按提交的prompt顺序,而openai-python的官方实现需要按索引匹配。

效果

openai-manager

prompts较多的情况下可以近似实现API_key个数的线性加速,不希望看到进度条的话可以加上no_tqdm=True

默认的logging level为WARNING,此等级下会显示每次RateLimitExceeded的结果,如果初步测试发现RateLimit次数不超过总提交次数的10%,你可以用export OPENAI_LOG_LEVEL=40忽略这些警告。

后续

考虑到openai-python是可以改请求URL的,如果考虑最小的原始代码改动,将openai-manager做成一个serving服务是一个不错的选择。例如运行python -m openai.serving --port 8888 --bind 127.0.0.1,然后将openai-python的URL指向http://127.0.0.1:8888。Anyway,这应该是闲下来之后下一步可以做的事。

从2023年04月01日起,我们支持了openai_manager.serving,具体使用方法如下:

Use it as a proxy server between you and OpenAI endpoint. First, run python -m openai_manager.serving --port 8000 --host localhost --api_key [your custom key]. Then set up the official python openai package (or any other official API implementations):

import openai
openai.api_base = "http://localhost:8000/v1"
openai.api_key = "[your custom key]"

# run like normal
prompt = ["Once upon a time, "] * 10
response = openai.Completion.create(
    model="text-davinci-003",
    prompt=prompt,
    max_tokens=20,
)
print(response["choices"][0]["text"])
Last modification:April 10th, 2023 at 04:11 pm
If you think my article is useful to you, please feel free to appreciate