OpenAI: 流中断(客户端断开连接)

11

我正在尝试使用OpenAI。

我准备好了训练数据,并使用了 fine_tunes.create。几分钟后,它显示出现了流中断(客户端断开连接)的情况。

$ openai api fine_tunes.create -t data_prepared.jsonl
Upload progress: 100%|██████████████████████████████████████████████| 47.2k/47.2k [00:00<00:00, 44.3Mit/s]
Uploaded file from data_prepared.jsonl: file-r6dbTH7rVsp6jJMgbX0L0bZx
Created fine-tune: ft-JRGzkYfXm7wnScUxRSBA2M2h
Streaming events until fine-tuning is complete...

(Ctrl-C will interrupt the stream, but not cancel the fine-tune)
[2022-12-02 11:10:08] Created fine-tune: ft-JRGzkYfXm7wnScUxRSBA2M2h
[2022-12-02 11:10:23] Fine-tune costs $0.06
[2022-12-02 11:10:24] Fine-tune enqueued. Queue number: 11

Stream interrupted (client disconnected).
To resume the stream, run:

  openai api fine_tunes.follow -i ft-JRGzkYfXm7wnScUxRSBA2M2h

我尝试使用fine_tunes.follow,几分钟后,它仍然失败了:

$ openai api fine_tunes.follow -i ft-JRGzkYfXm7wnScUxRSBA2M2h
[2022-12-02 11:10:08] Created fine-tune: ft-JRGzkYfXm7wnScUxRSBA2M2h
[2022-12-02 11:10:23] Fine-tune costs $0.06
[2022-12-02 11:10:24] Fine-tune enqueued. Queue number: 11

Stream interrupted (client disconnected).
To resume the stream, run:

  openai api fine_tunes.follow -i ft-JRGzkYfXm7wnScUxRSBA2M2h

openai api fine_tunes.list 的结果如下:

$ openai api fine_tunes.list
{
  "data": [
    {
      "created_at": 1669975808,
      "fine_tuned_model": null,
      "hyperparams": {
        "batch_size": 2,
        "learning_rate_multiplier": 0.1,
        "n_epochs": 4,
        "prompt_loss_weight": 0.01
      },
      "id": "ft-JRGzkYfXm7wnScUxRSBA2M2h",
      "model": "curie",
      "object": "fine-tune",
      "organization_id": "org-YyoQqNIrjGHYDnKt9t3T6x2J",
      "result_files": [],
      "status": "pending",
      "training_files": [
        {
          "bytes": 47174,
          "created_at": 1669975808,
          "filename": "data_prepared.jsonl",
          "id": "file-r6dbTH7rVsp6jJMgbX0L0bZx",
          "object": "file",
          "purpose": "fine-tune",
          "status": "processed",
          "status_details": null
        }
      ],
      "updated_at": 1669975824,
      "validation_files": []
    }
  ],
  "object": "list"
}

当执行命令$ openai api completions.create -m ft-JRGzkYfXm7wnScUxRSBA2M2h -p aprompt时,返回Error: That model does not exist (HTTP status code: 404)

是否有人可以提供帮助?


1
遇到了同样的问题。可能是队列过度拥挤,导致队列时间超过了某个超时时间? - user2398029
5个回答

8

显然,OpenAI API 出现了问题。(参见:Reddit 帖子Git 上的问题) 我通过运行以下命令将我的版本降级到 v.0.25:
pip install openai==0.25.0
这对我有用。尽管如此,可以期望未来会修复此问题。


2
这个问题应该已经被修复了吗?我一直遇到这个问题。 - MattG
2
截至今天,似乎还没有修复,尽管我没有进行更多的微调来测试它。在修复之前,我建议使用0.25版本 - 至少用于微调。在完成微调后,您可以恢复并使用当前版本的微调模型。 - Raste
大约一分钟后,微调断开连接。即使在0.25版本上也是如此。似乎问题是服务器端的。 - Antoine Neidecker
我认为您不需要保持连接来进行微调。一旦您上传文件,OpenAI将为您完成其余的工作。如果我没记错的话,还有一个命令可以重新连接到您的微调输出流。完成微调后,您可以使用CLI查看经过微调的模型。另一种方法是登录OpenAI Playground并在右侧选择您的微调模型。 - Raste

2

这是OpenAI的一个临时问题,团队已经解决了。


3
错误又出现了! - Mritunjay Prasad
今天还是遇到这个错误! - Ali
今天还在收到这个错误! - undefined
目前为止不是临时的,而是永久的。 - Raul Mercado

2
好消息是,流中断只会阻止您查看进度,而不会真正进行微调。您的工作已经在队列中。
坏消息是,您永远不知道需要多长时间。根据https://platform.openai.com/docs/guides/fine-tuning

流事件直到任务完成(通常需要几分钟,但如果队列中有许多任务或数据集很大,则可能需要几小时)

您可以定期使用以下命令检查作业状态: openai api fine_tunes.list 更多信息:

https://community.openai.com/t/stream-interrupted-client-disconnected-during-fine-tunes-follow/70334/20


1
我遇到了同样的错误,最后创建了一个Python程序来监控进度,而不是手动运行命令。只需更改ID,你就可以开始了。
import subprocess
import time
import threading
import json
import requests

class FineTuneMonitor:
    def __init__(self):
        self.cmd1 = "openai api fine_tunes.follow -i ft-YOUR_ID_TO_MONITOR"
        self.cmd2 = "openai api fine_tunes.list"
        self.id = "**YOUR_ID_TO_MONITOR**"  # Set the ID of your fine-tune process
        self.process = None
        self.success = False

    def run_command(self):
        self.process = subprocess.Popen(self.cmd1, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)

        while True:
            output = self.process.stdout.readline().decode()
            print(output.strip())

            if self.process.poll() is not None:
                break

            if 'Stream interrupted' in output:
                self.process.kill()
                return False

        return True

    def monitor_status(self):
        while True:
            output = subprocess.check_output(self.cmd2, shell=True).decode()
            data = json.loads(output)
            status = next((item["status"] for item in data["data"] if item["id"] == self.id), None)

            if status is None:
                print("Could not find status for the given ID.")
                return

            print(f"Status: {status}")

            if status != "pending":
                if self.process is not None:
                    self.process.kill()
                self.success = True
                return

            time.sleep(10)

    def start(self):
        threading.Thread(target=self.monitor_status).start()

        while not self.success:
            self.run_command()
            print("Stream was interrupted, retrying in 10 seconds...")
            time.sleep(10)

monitor = FineTuneMonitor()
monitor.start()

这个脚本创建了一个FineTuneMonitor类,封装了运行和监控OpenAI命令的逻辑。start方法在一个新线程中启动状态监控,并重复运行第一个命令,直到成功完成。monitor_status方法每10秒运行第二个命令,并在状态从“pending”变化时终止第一个命令的进程。
将self.id替换为您的fine-tune进程的ID。脚本假设状态位于第二个命令输出中的data -> status下。如果输出的结构发生变化,您需要相应地更新脚本。

0
我一直在搞砸这个命令: openai api fine_tunes.follow -i 直到它获得了一个队列号码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接