Skip to content

WangYangfan/AIGC2023

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 

Repository files navigation

AIGC2023

🔊 本仓库为2023年夏季学期AIGC课程创建,内含实验所需部分资料

🤖 时间安排

  • 第一次实验课7月16日晚上
  • 第二次实验课7月22日上午9点

💬 Github Copilot

🔉 实验要求:

  1. 完成Github Copilot工具的前期准备,获得Copilot工具使用权限,配置工具扩展
  2. 熟悉Github Copilot工具使用,体会Prompt构造的方法,使用Copilot工具编写一个2048游戏

前期准备

Step1 注册GitHub: https://github.com ☝️为后续学生认证方便最好使用edu邮箱

Step2 认证Github Student Developer Pack: https://education.github.com/pack ☝️需要几天时间认证通过

  • 登陆github主页,点击头像,侧边栏选择Try Copilot,根据提示操作,如果出现下面烟花说明具备Copilot使用权限

Step3 安装并配置VS Code: https://code.visualstudio.com/download ☝️ 也可以选用自己熟悉的支持Copilot扩展的编程工具

  • 在VS Code中搜索并安装Github Copilot扩展,并登陆自己的学生认证成功的Github账号即可使用

  • 在VS Code中搜索并安装Remote SSH扩展,用于远程连接服务器

安装完成后,VS Code侧栏会出现小电脑图标,点击后会显示电脑配置的SSH连接

  • 配置电脑SSH连接服务器

ssh -L post:localhost:host_port username@server_ip -p ssh_port是标准的SSH连接命令,其中post为本地端口,host_port为服务器端口,username为服务器用户名,server_ip为服务器ip地址,ssh_port为服务器SSH端口,每次连接服务器都需要输入密码和繁琐的SSH连接命令,为了方便,可以在本地配置SSH免密登录和别名登录,具体操作如下:

在本地生成SSH密钥对,如果已经有密钥对可以跳过这一步,否则在终端输入ssh-keygen -t rsa -C "[email protected]会在~/.ssh/目录下生成私钥id_rsa和公钥id_rsa.pub,将公钥id_rsa.pub内容复制到服务器~/.ssh/authorized_keys文件中,应该是ssh-rsa开头,[email protected]结尾,如果没有该文件则新建,然后在本地~/.ssh/config文件中添加如下内容:

Host server_alias
    HostName server_ip
    LocalForward post localhost:host_port
    Port ssh_port
    User username
    IdentityFile ~/.ssh/id_rsa

其中server_alias为服务器别名,IdentityFile配置本地私钥路径(可以不写,默认是~/.ssh/id_rsa),用于配置连接多个服务器,配置完成后,可以直接在终端输入ssh server_alias连接服务器,如果配置成功,会直接进入服务器,无需输入密码和繁琐的SSH连接命令

此时VS Code侧栏小电脑图标会出现server_alias,点击后会显示服务器配置的SSH连接,点击即可连接服务器,远程编程

使用Copilot工具生成代码

Github Copilot官方网站(含文档): https://github.com/features/copilot

💬 Chatglm-6B

🔉 实验要求:

  1. 完成Chatglm-6B模型环境的配置,模型的本地部署,并通过命令行/web/api调用本地模型,下面任务2和3二选一,每人调优一个模型
  2. 了解Chatglm-6B模型微调所需数据的形式,模型微调的流程,使用Copilot工具爬取或生成微调数据数据,对模型进行P-Tuning/Fine-Tuning微调
  3. 了解LangChain工作机制,使用Copilot工具爬取或生成微调数据数据,对模型使用LangChain机制外挂知识库
  4. 每人出10个梗百科相关的问题

前期准备

Step0 可以选择使用Miniconda管理编程环境

​wget -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh

使用conda -V检查是否安装成功,使用conda create -n aigc2023 python=3.9创建环境,conda activate aigc2023激活环境,conda deactivate退出环境

Step1 下载Chatglm-6B模型及代码

Chatglm官方网站: https://github.com/THUDM/ChatGLM-6B

git clone [email protected]:THUDM/ChatGLM-6B.git克隆项目代码到本地

激活aigc2023环境,pip install -r requirements.txt安装依赖

pip install huggingface_hub安装huggingface_hub,如果pip源无法连接可以尝试使用清华源pip install huggingface_hub -i https://pypi.tuna.tsinghua.edu.cn/simple

./ChatGLM-6B/路径下创建文件夹mkdir chatglm-6b用于存放本地模型文件

python进入python交互环境,执行如下代码下载模型

from huggingface_hub import snapshot_download
snapshot_download(repo_id="THUDM/chatglm-6b", local_dir="./chatglm-6b/")

查看模型文件,内含文件如下

爬虫

数据网址:https://genbaike.com/

可能用到的爬虫教程:https://mofanpy.com/tutorials/data-manipulation/scraping/

建议使用xpath解析网页,xpath教程:https://www.runoob.com/xpath/xpath-tutorial.html

# 爬取数据可以使用requests库
import requests
resp = requests.get(url, timeout=10)
# 解析HTML可以使用lxml库
from lxml import etree
html = etree.HTML(resp.text)
# 使用xpath寻找具体的文字,如标题:
question = html.xpath("//div[@class='da-title']/h2/text()")

使用Copilot工具爬取数据,爬取的数据格式如下

模型微调的数据示例(json格式):

{
    "instruction": "解释一下这个梗",
    "input": "泰裤辣",
    "output": "泰裤辣,是“太酷啦”的意思。泰裤辣,源自于王琳凯在演唱会上说的一句话:“我是一个特别固执的人,我从来不会在意别人跟我说什么,让我去做。如果你也可以像我一样,那我觉得这件事情太酷啦!”由于这个“太酷啦”说的过于魔性,加上他的口音和发音,听起来像是“泰裤辣”,就被网友们戏称为“泰裤辣”。"
},
{
    "instruction": "解释一下这个梗",
    "input": "小镇贵妇",
    "output": "小镇贵妇,这个梗衍生于小镇做题家,根据当前网友们所处环境总结出来的一个全新的网络词汇。小镇贵妇指的是在小镇上有车有房工作稳定的人,这些人虽然不是生活在大城市,但是生活却比那些大城市的人要轻松惬意的多。她们符合长辈满意甚至艳羡的全部要素,有房有车有稳定工作的前提下,生活富足并且嫁的很近。不需要初七就赶着就上班,不需要为了辛苦的工作而苦恼。比如,自己在大城市辛苦拼搏月薪两万,原本以为是同学当中的佼佼者,过年的时候回到家乡才发现远不如这些同学,心里的落差感一下就来了。最终也只能感叹一下:“月薪2万活得不如小镇贵妇,她们才是人生赢家。”"
}

LangChain的数据示例(txt格式):

泰裤辣,是“太酷啦”的意思。泰裤辣,源自于王琳凯在演唱会上说的一句话:“我是一个特别固执的人,我从来不会在意别人跟我说什么,让我去做。如果你也可以像我一样,那我觉得这件事情太酷啦!”由于这个“太酷啦”说的过于魔性,加上他的口音和发音,听起来像是“泰裤辣”,就被网友们戏称为“泰裤辣”。
小镇贵妇,这个梗衍生于小镇做题家,根据当前网友们所处环境总结出来的一个全新的网络词汇。小镇贵妇指的是在小镇上有车有房工作稳定的人,这些人虽然不是生活在大城市,但是生活却比那些大城市的人要轻松惬意的多。她们符合长辈满意甚至艳羡的全部要素,有房有车有稳定工作的前提下,生活富足并且嫁的很近。不需要初七就赶着就上班,不需要为了辛苦的工作而苦恼。比如,自己在大城市辛苦拼搏月薪两万,原本以为是同学当中的佼佼者,过年的时候回到家乡才发现远不如这些同学,心里的落差感一下就来了。最终也只能感叹一下:“月薪2万活得不如小镇贵妇,她们才是人生赢家。

参数微调

Chatglm-6B微调官方文档: https://github.com/THUDM/ChatGLM-6B/blob/main/ptuning/README.md

InstructGLM指令微调文档:https://github.com/yanqiangmiffy/InstructGLM

为合理利用gpu资源,建议使用单卡进行模型微调,操作如下: ​ 指定gpu:1进行P-Tuning微调,将train.sh中的CUDA_VISIBLE_DEVICES=0改为CUDA_VISIBLE_DEVICES=1,执行bash train.sh即可开始微调,微调完成后会在./ChatGLM-6B/ptuning/路径下生成微调模型

PRE_SEQ_LEN=128
LR=2e-2

# CUDA_VISIBLE_DEVICES=0 python3 main.py \
CUDA_VISIBLE_DEVICES=1 python3 main.py \
    --do_train \
    --train_file AdvertiseGen/train.json \
    --validation_file AdvertiseGen/dev.json \
    --prompt_column content \
    --response_column summary \
    --overwrite_cache \
    --model_name_or_path THUDM/chatglm-6b \
    --output_dir output/adgen-chatglm-6b-pt-$PRE_SEQ_LEN-$LR \
    --overwrite_output_dir \
    --max_source_length 64 \
    --max_target_length 64 \
    --per_device_train_batch_size 1 \
    --per_device_eval_batch_size 1 \
    --gradient_accumulation_steps 16 \
    --predict_with_generate \
    --max_steps 3000 \
    --logging_steps 10 \
    --save_steps 1000 \
    --learning_rate $LR \
    --pre_seq_len $PRE_SEQ_LEN \
    --quantization_bit 4

指定gpu:1进行Fine-Tuning微调,将ds_train_finetune.sh中的deepspeed --num_gpus=4 --master_port $MASTER_PORT main.py改为deepspeed --include="localhost:1" --master_port $MASTER_PORT main.py,执行bash ds_train_finetune.sh即可开始微调,微调完成后会在./ChatGLM-6B/ptuning/路径下生成微调模型

Deepspeed官方文档: https://www.deepspeed.ai/getting-started/

LR=1e-4

MASTER_PORT=$(shuf -n 1 -i 10000-65535)

# deepspeed --num_gpus=4 --master_port $MASTER_PORT main.py \
deepspeed --include="localhost:1" --master_port $MASTER_PORT main.py \
    --deepspeed deepspeed.json \
    --do_train \
    --train_file AdvertiseGen/train.json \
    --test_file AdvertiseGen/dev.json \
    --prompt_column content \
    --response_column summary \
    --overwrite_cache \
    --model_name_or_path THUDM/chatglm-6b \
    --output_dir ./output/adgen-chatglm-6b-ft-$LR \
    --overwrite_output_dir \
    --max_source_length 64 \
    --max_target_length 64 \
    --per_device_train_batch_size 4 \
    --per_device_eval_batch_size 1 \
    --gradient_accumulation_steps 1 \
    --predict_with_generate \
    --max_steps 5000 \
    --logging_steps 10 \
    --save_steps 1000 \
    --learning_rate $LR \
    --fp16

LangChain

Langchain-ChatGLM官方文档:https://github.com/imClumsyPanda/langchain-ChatGLM

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published