【AI实战】训练一个自己的ChatGPT

news2024/11/18 22:26:17

【AI实战】训练一个自己的ChatGPT

  • 准备
    • 环境
    • 代码
    • 模型
  • 数据集Belle
    • 下载 Belle 的开源中文数据集(仅限研究使用,禁止商用!)
    • 清洗自己的数据集
    • 上述工作完成后,大概是这样子的
  • 训练
  • 测试
  • 参考

本文使用 Alpaca-LoRA 来训练一个自己的 ChatGPT,数据集包括开源的55w数据集和我自己的1000w的医疗问答数据集。

准备

环境

  • CUDA 10.2
  • Ubuntu 20.04
  • python 3.8
  • torch 2.0.0

代码

使用 Alpaca-LoRA 的代码,我们先 clone Alpaca-LoRA:

git clone git@github.com:tloen/alpaca-lora.git

若出现下面的报错信息:

# git clone git@github.com:tloen/alpaca-lora.git

Cloning into 'alpaca-lora'...
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

可以按照这篇文章进行处理:
https://blog.csdn.net/helloasimo/article/details/123778112

  • 其他依赖安装

    cd alpaca-lora
    pip install -r requirements.txt
    

    若是失败,可以多试几次,可能是网络问题。

  • 上面完工后,大概是这样子的

    /notebooks/alpaca-lora# ls -lh
    total 44M
    -rw-r--r-- 1 root root  20K Mar 31 07:53 DATA_LICENSE
    -rw-r--r-- 1 root root  635 Mar 31 07:53 Dockerfile
    -rw-r--r-- 1 root root  12K Mar 31 07:53 LICENSE
    -rw-r--r-- 1 root root  15K Mar 31 07:53 README.md
    -rw-r--r-- 1 root root  22M Mar 31 07:53 alpaca_data.json
    -rw-r--r-- 1 root root  22M Mar 31 07:53 alpaca_data_cleaned.json
    -rw-r--r-- 1 root root  643 Mar 31 07:53 docker-compose.yml
    -rw-r--r-- 1 root root 1.5K Mar 31 07:53 export_hf_checkpoint.py
    -rw-r--r-- 1 root root 3.6K Mar 31 07:53 export_state_dict_checkpoint.py
    -rw-r--r-- 1 root root 9.5K Mar 31 07:53 finetune.py
    -rw-r--r-- 1 root root 5.8K Mar 31 07:53 generate.py
    -rw-r--r-- 1 root root  81K Mar 31 07:53 lengths.ipynb
    -rw-r--r-- 1 root root  131 Mar 31 07:53 pyproject.toml
    -rw-r--r-- 1 root root  206 Mar 31 07:53 requirements.txt
    drwxr-xr-x 2 root root 4.0K Mar 31 07:53 templates
    drwxr-xr-x 2 root root 4.0K Mar 31 07:53 utils
    

模型

使用 alpaca-lora-cn-13b 模型作为我们的大模型
地址:https://huggingface.co/facat/alpaca-lora-cn-13b/tree/main

clone模型:

# Make sure you have git-lfs installed (https://git-lfs.github.com)

git lfs install
git clone https://huggingface.co/facat/alpaca-lora-cn-13b

注:可能需要手动下载 adapter_model.bin ,到 https://huggingface.co/facat/alpaca-lora-cn-13b/tree/main 可以手动下载

大概是这样子:

/notebooks# ls -lh alpaca-lora-cn-13b/
total 26M
-rw-r--r-- 1 root root 341 Mar 30 09:50 README.md
-rw-r--r-- 1 root root 371 Mar 30 09:50 adapter_config.json
-rw-rw-r-- 1 1003 1003 26M Mar 30 09:54 adapter_model.bin

数据集Belle

【如果没有自己的数据集,就用这个数据集来训练模型】

下载 Belle 的开源中文数据集(仅限研究使用,禁止商用!)

  • 介绍
    该数据集有 55w 条
    下载数据集地址:
    https://huggingface.co/datasets/BelleGroup/generated_train_0.5M_CN/tree/main

  • 数据格式:
    在这里插入图片描述

  • json格式

    {"input": "用一句话描述地球为什么是独一无二的。\\n\n", "target": "地球上有适宜生命存在的条件和多样化的生命形式。"}
    {"input": "给出一段对话,要求GPT模型使用合适的语气和回答方式继续对话。\n对话:\nA:你今天看起来很高兴,发生了什么好事?\nB:是的,我刚刚得到一份来自梅西银行的工作通知书。\nA:哇,恭喜你!你打算什么时候开始工作?\nB:下个月开始,所以我现在正为这份工作做准备。", "target": "A: 这太好了!你的新工作听起来很令人兴奋。你对接下来的日子有什么期望吗?\nB: 是啊,我非常期待能在梅西银行工作。我希望我能够尽快适应新环境,并展示出我的所有技能和才能。"}
    

清洗自己的数据集

将数据清洗为上述 json 格式
数据有1000w条,太大了,这里就不放出来了。
数据格式同上。

数据清洗后的数据格式如下:
all_data.train.json:

[
    {
        "instruction": "Give three tips for staying healthy.",
        "input": "",
        "output": "1. Eat a balanced diet and make sure to include plenty of fruits and vegetables. \n2. Exercise regularly to keep your body active and strong. \n3. Get enough sleep and maintain a consistent sleep schedule."
    },
    {
        "instruction": "What are the three primary colors?",
        "input": "",
        "output": "The three primary colors are red, blue, and yellow."
    }
]

上述工作完成后,大概是这样子的

/notebooks# ls -lh
total 1.5G
drwxr-xr-x 6 root root 4.0K Mar 31 07:53 alpaca-lora
drwxr-xr-x 3 root root 4.0K Mar 31 08:15 alpaca-lora-cn-13b
drwxrwxr-x 2 1003 1003 4.0K Mar 30 09:14 data

其中清洗的数据:

/notebooks/data# du -sh all_data.train.json
6.2G    all_data.train.json

训练

  • 单卡训练
python3 finetune.py \
    --base_model 'decapoda-research/llama-7b-hf' \
    --data_path '../data/all_data.train.json' \
    --output_dir './lora-alpaca-zh' \
    --micro_batch_size 1 \
    --num_epochs 3

过程如下:
在这里插入图片描述
下载数据特别大,需要比较长的时间(我用了大概4个小时)!!!

  • 多卡训练
    我用了4个卡
WORLD_SIZE=4 CUDA_VISIBLE_DEVICES=0,1,2,3 torchrun \
	--nproc_per_node=2 \
	--master_port=1234 \
	finetune.py \
	--base_model 'decapoda-research/llama-7b-hf' \
	--data_path '../data/all_data.train.json' \
	--output_dir './lora-alpaca-zh' \
    --micro_batch_size 1 \
    --num_epochs 3

测试

python3 generate.py \
    --load_8bit \
    --base_model 'decapoda-research/llama-7b-hf' \
    --lora_weights './lora-alpaca-zh'
  • 测试效果

参考

  • https://huggingface.co/facat/alpaca-lora-cn-13b/tree/main
  • https://github.com/tloen/alpaca-lora
  • https://github.com/gururise/AlpacaDataCleaned

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/492412.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux_top命令

top命令是Linux系统下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。它是一个动态显示过程,执行该命令后,它展示的信息会将独占前台,直到用户终止该程序为止(可以用Ctrl C终止)。 t…

汇编仿真 — 比较大小

项目文件 文件 关于项目的内容知识点可以见专栏单片机原理及应用 的第三章 汇编 题目:编程实现如下功能:比较片内 RAM的30H和40H单元中两个无符号数的大小,并将大数存入50H,小数存入51H,若两数相等,则使位单元7FH置1…

内网:域内信息收集

一,判断是否有域 ipconfig /all systeminfo workgroup net config workstation net time /domain(该命令有三种情况) 1,存在域,当前用户不是域用户。 2,存在域,当前用户是域用户。 3&#xff0c…

使用dataFEED OPC Suite将西门子PLC数据转发至REST API

一 背景 在工业4.0或工业物联网的项目方案中,逐渐紧密融合的OT&IT技术给工业制造带来了新活力。与此同时,利用IT级别的协议和应用来对制造数据进行收集和分析也成为了指导工业生产和优化流程的重要力量,尤其是基于HTTP的轻量级协议REST …

Python---学生管理系统、hashlib模块

1. 学生管理系统 学生管理系统的数据结构设置: 一个学生信息对应一个字典 整个系统的所有学生:所有学生对应一个列表,列表中的元素全是字典 整个系统:一个字典, 字典中有一个key(all_student) 对应的值是所有学生; 这个字典需要做数据持久化…

从传统Java应用到现代微服务,SpringBoot入门的基础指南

目录 一. 创建SpringBoot项目1.1 使用Spring Initializr快速构建项目1.2 手动创建springboot项目 二. SpringBoot入门案例解析2.1 依赖管理特性2.2 starter场景启动器2.3 引导类自动配置 三. REST风格四. 配置文件4.1 配置文件类型4.2 YAML文件的简介与使用4.3 Value与Configur…

VSCode 开发flutter 实现安卓设备远程调试

1,首先安装 ADB Commanads for VSCode扩展 并且必须确保ADB已经添加到系统环境变量中 如未添加请按照下面的方式添加,如添加请直接跳到下面。 2,添加环境变量(windows可参考,mac忽略此项) 我将ADB安装到这…

3分钟快速实现mysql全量增量备份

需求说明: mysql数据库ip地址为192.168.1.100,端口3306,root密码111111, 服务器cantos7中ip地址192.168.1.101 利用xtrabackup每周六进行全量备份,每天进行增量备份,保留2个礼拜的备份,并且保存…

睡眠经济2.0时代来了,老巨头们有护城河吗?

在第23个世界睡眠日,中国睡眠研究会等机构发布了《中国睡眠研究报告2023》,近半数人每晚平均睡眠时长不足8小时,“失眠”已成为了当代人的生活常态。 越是睡不好,越要想办法。年轻人纷纷求助于好的寝具、好的助眠产品乃至保健品&…

【C语言进阶C++】 C++基础--让你丝滑的从C语言进阶到C++

目录 前言 正文 1. 面向过程、面向对象 面向过程思维 面向对象思维 面向过程语言优缺点 面向对象语言优缺点 C面向对象特点 2. 输入、输出 C中的输入输出 总结C和C输入输出 3. 命名空间 作用域 命名空间 4. 动态申请空间 C动态申请空间(new、delete&…

Leetcode刷题之回文链表和交换链表中的结点

竭力履行你的义务,你应该就会知道,你到底有多大的价值。 --列夫.托尔斯泰 目录 🪴一.回文链表 🌻1.快慢指针 🍁2.把值存入数组中,然后使用双指针 🌼二.交换链表中的结点 &#x1…

经典论文解读 — 端到端的VL预训练网络SOHO

来源:投稿 作者:摩卡 编辑:学姐 论文标题: Seeing Out of tHe bOx :End-to-End Pre-training for Visual-Language Representation Learning》 Motivation 本文针对目前大量Visual-Language(VL) tasks使用由Faster-RCNN提取出的…

余弦相似度公式推导及代码实现

余弦相似度公式推导 1. 为什么使用余弦值相似度?2. 公式推导2.1 三角函数余弦公式推导2.2 三角函数向量余弦公式推导 3. 余弦相似度代码实现 1. 为什么使用余弦值相似度? 空间维度上两个点之间相似定义 在空间维度上两个点之间是有夹角和方向&#xff0…

计算机操作系统实验:页面置换算法的实现

目录 前言实验目的实验内容实验过程最佳置换算法代码实现算法流程流程图设计思路运行结果 先进先出算法代码实现算法流程流程图设计思路运行结果 最近最久未使用算法代码实现算法流程流程图设计思路运行结果 总结 前言 本实验的目的是通过编程模拟不同的页面置换算法&#xff…

基于思科模拟器的路由与交换实训报告(单臂路由、三层交换机实现vlan通信、ospf、rip、dhcp、acl、nat技术总结)

本博客是路由与交换实训报告,基于思科模拟器分别做了单臂路由、三层交换机实现vlan间通信、ospf、rip、dhcp、nat的实验,最后的nat综合实验是本次实训的大拓扑,综合了上述的几个技术。 大家可以当作一些思科小实验的总结,供网络工…

数据库管理-第七十二期 复盘(20230505)

数据库管理 2023-05-05 第七十二期 复盘1 再测试2 对照分析: 3 如何解决总结 第七十二期 复盘 上一期的内容,我承认主要是在放假,分析过程还是水了一点,SR转回国内之后,处理效率还是提升了一大截。 1 再测试 在客户…

Linux - 第11节 - 网络基础(一)

1.计算机网络背景 1.1.网络发展 独立模式:计算机之间相互独立 在早期的时候,计算机之间是相互独立的,此时如果多个计算机要协同完成某种业务,那么就只能等一台计算机处理完后再将数据传递给下一台计算机,然后下一台计…

Python进阶——实现人脸识别

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 今天我们来实现一下人脸识别~ 先问大家一个问题 什么是百度Aip模块? 百度AI平台提供了很多的API接口供开发者快速的调用运用在项目中 本文写的是使用百度AI的在线接口SDK模块(baidu-aip&#…

单链表——单链表的定义及基本操作(初始化、头插法尾插法建表、查找、插入、删除、判空等)

单链表的定义 由于顺序表存在以下缺陷,所以衍生出了链表,而链表种类有很多种,今天我们讲的是单链表。 顺序表存在的问题如下 1.中间/头部的插入删除,时间复杂度为O(N) 2. 增容需要申请新空间,拷贝数据,释…

CPU 架构(x86/ARM)简介

CPU 架构通过指令集的方式一般可分为 复杂指令集(CISC) 和 精简指令集(RISC) 两类,CISC 主要是 x86 架构,RISC 主要是 ARM 架构,还有 MIPS、RISC-V、PowerPC 等架构。 本文重点介绍 x86 和 ARM…