• finetune一个GPT3模型


    过程其实挺简单的,首先得注册一个账号获取token(我是叫在美国的朋友注册了一个)。注册好账号后,有18美金的试用额度,基本可以完成好几次模型训练了。除了模型训练需要收费之外,大概1000个token的费用是0.02美金。

    设置好OPENAI_API_KEY这个环境变量。

        export OPENAI_API_KEY=""

    接下来就进入正题了,

    1. 准备数据,格式如下,每一行都是一个json,换行用\n表示,我finetune的task只需要1000条左右的数据,模型结果还不错,根据训练时的提示,至少需要100条,越多越好

    1. {"prompt": "", "completion": ""}
    2. {"prompt": "", "completion": ""}
    3. {"prompt": "", "completion": ""}
    4. ...

    openai提供了现成的命令可以转csv成json: openai tools fine_tunes.prepare_data -f ./train_data.csv

    2. 训练,我finetune的是davinci模型,还有三四个选择,输错命令行会提示。我的task只finetune了一个周期,整个过程大概花费1美金,持续约5~10分钟

    openai api fine_tunes.create -t ./train_data_prepared.jsonl -m davinci --n_epochs 1

    不需要的模型还可以删除

    openai api models.delete -i "davinci:ft-personal-2022-11-20-03-40-02"

    用如下命令可以列出曾经训练的模型列表

    openai api fine_tunes.list

    3. api调用,有好几种方法,比如直接

    openai api completions.create -m davinci:ft-personal-2022-11-20-04-05-47 -p "Beautiful sunset beach landscape with a boat"

    我的task还需要设置更多的两个参数temperature和frequency_penalty,所以我写了个简单的脚本完成这个任务,并且openai限制1秒调用超过60次,我加了个简单的sleep。其中有个坑是,推理的时候seperator里的\n,无需过采用"\\"多转义。

    1. import os
    2. import sys
    3. import openai
    4. import json
    5. import time
    6. if not os.path.exists(sys.argv[2]):
    7. res = openai.Completion.create(
    8. max_tokens=32,
    9. model=sys.argv[1],
    10. prompt=sys.argv[2]+"\n##\n",
    11. temperature=0.7,
    12. frequency_penalty=0.1)
    13. text = res["choices"][0]["text"]
    14. items = text.split('\n')
    15. print(sys.argv[2]+"|"+items[0]+"|"+items[2])
    16. else:
    17. f = open(sys.argv[2])
    18. lines = [line.strip()[:-2] for line in f.readlines()]
    19. f.close()
    20. f = open("./result.txt", "a+")
    21. for i,line in enumerate(lines):
    22. print(i, line)
    23. try:
    24. res = openai.Completion.create(
    25. max_tokens=32,
    26. model=sys.argv[1],
    27. prompt=line+"\n##\n",
    28. temperature=0.7,
    29. frequency_penalty=0.1)
    30. text = res["choices"][0]["text"]
    31. items = text.split('\n')
    32. print(line+"|"+items[0]+"|"+items[2], file=f)
    33. if i%30 == 0:
    34. f.flush()
    35. time.sleep(1.5)
    36. except Exception as e:
    37. print(e)
    38. time.sleep(15)
    39. f.close()

    参考OpenAI API

  • 相关阅读:
    GD32F470引脚外部中断测试
    Java Equals源码基础
    地标识别易语言代码
    nm命令使用详解,让你加快学习速度
    java的代理 静态与动态代理
    【408数据结构与算法】—队列的顺序表示和实现(十三)
    AI图书下载:《ChatGPT打造赚钱机器》
    什么是Monkey,以及Monkey异常
    Java23种设计模式系列——结构型模式之组合模式day4-3
    Istio1.12:安装和快速入门
  • 原文地址:https://blog.csdn.net/xiexiecn/article/details/128043751