码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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

  • 相关阅读:
    Nature发布:ChatGPT 帮助我进行学术写作的三种方式
    考虑人机协同的智能工厂多AGV物流调度仿真研究
    LeetCode每日一题(2438. Range Product Queries of Powers)
    【Python基础知识】(17)序列类型的相互转换
    云计算期末复习(3)
    java计算机毕业设计springboot+vue度假山庄酒店管理系统(源码+系统+mysql数据库+Lw文档)
    03_Java数组与方法
    猿创征文|【云原生 | 25】Docker运行数据库实战之Redis
    计算机毕业设计asp.net社团人员信息系统VS开发sqlserver数据库web结构c#编程计算机网页项目
    随手记录第十话 -- 升级SpringBoot3.0 + JDK17的踩坑记录
  • 原文地址:https://blog.csdn.net/xiexiecn/article/details/128043751
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号