Reputation: 39
I am trying to get fine-tune model from OpenAI GPT-3 using python with following code
#upload training data
upload_response = openai.File.create(
file=open(file_name, "rb"),
purpose='fine-tune'
)
file_id = upload_response.id
print(f'\nupload training data respond:\n\n {upload_response}')
OpenAI respond with data
{
"bytes": 380,
"created_at": 1675789714,
"filename": "file",
"id": "file-lKSQushd8eABcfiBVwhxBMOJ",
"object": "file",
"purpose": "fine-tune",
"status": "uploaded",
"status_details": null
}
My training file has been uploaded so I am checking for fine-tune response with code
fine_tune_response = openai.FineTune.create(training_file=file_id)
print(f'\nfine-tune respond:\n\n {fine_tune_response}')
I am getting
{
"created_at": 1675789714,
"events": [
{
"created_at": 1675789715,
"level": "info",
"message": "Created fine-tune: ft-IqBdk4WJETm4KakIzfZeCHgS",
"object": "fine-tune-event"
}
],
"fine_tuned_model": null,
"hyperparams": {
"batch_size": null,
"learning_rate_multiplier": null,
"n_epochs": 4,
"prompt_loss_weight": 0.01
},
"id": "ft-IqBdk4WJETm4KakIzfZeCHgS",
"model": "curie",
"object": "fine-tune",
"organization_id": "org-R6DqvjTNimKtBzWWgae6VmAy",
"result_files": [],
"status": "pending",
"training_files": [
{
"bytes": 380,
"created_at": 1675789714,
"filename": "file",
"id": "file-lKSQushd8eABcfiBVwhxBMOJ",
"object": "file",
"purpose": "fine-tune",
"status": "uploaded",
"status_details": null
}
],
"updated_at": 1675789714,
"validation_files": []
}
As you see, the fine_tune_model is null so I cant use it for Completion. My question is how to check for example in While loop if my fine-tune is complete using ft id
Upvotes: 1
Views: 1716
Reputation: 2132
Here is a code to wait until your model is trained with updates:
print("Started Training ...")
id = fine_tune_response.id
error = False
while True:
cmd = "openai -k " + api_key + " api fine_tunes.get -i " + id
result = subprocess.run(cmd, stdout=subprocess.PIPE, shell=True)
if "\"status\": \"succeeded\"" in str(result.stdout):
print("Succeeded")
break
if result.stderr !=None:
print("Error in cmd!")
error = True
break
if "\"status\": \"failed\"" in str(result.stdout):
print("Failed remote job!")
error = True
break
time.sleep(20)
print("Still training ...")
print("Done Training")
Full example: https://github.com/toncho11/ML_examples/blob/main/OpenAI/FineTuneGPT3.py Note that if the CMD returns the help screen of openai command then this loop will never exit.
Upvotes: 0
Reputation: 1909
Here is data from the OpenAI documentation on fine-tuning:
After you've started a fine-tune job, it may take some time to complete. Your job may be queued behind other jobs on our system, and training our model can take minutes or hours depending on the model and dataset size.
Ref: https://platform.openai.com/docs/guides/fine-tuning
The OpenAI guide uses the CLI tool to create the fine-tuning and then accesses the model programatically once the training has completed.
Therefore, you couldn't run the code in Python as you have laid it out, since you need to wait for the training to complete. Meaning you can't train the model on the fly and use it instantly.
Upvotes: 2