大语言模型训练篇:提示词工程【复现】 #41
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
开发环境准备
确认算法/代码
准备notebook
确认数据
确认模型
国内外模型的API Key准备
由于我准备调用的是GLM4,所以准备的是智普的API Key
调用国内大模型GLM4测试
在左边目录里可以查到GLM4的python文件:call_glm4.py
设置环境
在【汇视威平台】上运行代码调用线上模型之前需要设置代理以连接到互联网,设置如下
调用GLM4
因为调用的是GLM4,所以设置的是对应的智普api-key
由于该文件位于code目录下,所以调用前要先转到code目录下
最后,在code目录下,调用GLM4文件call_glm4
本地开源模型部署
使用FastChat部署codellama-7b-hf模型
每输入一行命令就建立一个新的终端
这段代码是一系列指令,用于在不同的终端会话中启动一个基于 Python 的服务,这里是指聊天模型服务。下面是每个命令的解释:
python -m fastchat.serve.controller --host 0.0.0.0
--host 0.0.0.0
表示服务将监听所有可用的网络接口,允许任何机器上的客户端连接到这个服务。python -m fastchat.serve.model_worker --model-path /dataset/CodeLlama-7b-hf/ --host 0.0.0.0 --num-gpus 4 --max-gpu-memory 15GiB
--model-path /dataset/CodeLlama-7b-hf/
指定了模型文件的存储路径。--host 0.0.0.0
同样表示服务将监听所有网络接口。--num-gpus 4
指定了服务将使用4个GPU进行模型推理。--max-gpu-memory 15GiB
设置了每个GPU可以使用的最大内存为15GB。python -m fastchat.serve.openai_api_server --host 0.0.0.0
--host 0.0.0.0
表示服务器将对所有网络接口开放。这些命令通常用于在本地机器或服务器上部署一个聊天模型服务。你需要在三个不同的终端窗口中依次执行这些命令,以确保服务的各个组件能够正确启动并协同工作。
终端一:
终端二:
终端三:
codellama-7b-hf模型调用
最后,再打开一个新的终端,调用codellama-7b-hf模型
终端四:
由于询问的是Which class,所以理论上希望得到的回答应该是Select Class...,但得到的回答是Select *,所以可以对codellama-7b-hf模型进行微调训练以提升模型性能,使模型回答的更好。
微调训练
训练管理
开启训练管理
bash
: 这是调用 Bourne Again Shell(BASH)的命令,BASH 是 Linux 和 Unix 系统中常用的 shell。distributed_finetune_job.sh
: 这是一个 shell 脚本文件,可能包含了用于分布式训练或微调模型的一系列命令和参数设置。llama2_7b_chat_qlora_sql_e3_copy.py
: 这是一个 用于微调模型的Python脚本。脚本名中的llama2_7b
可能指的是一个具有 70 亿参数的模型,chat
可能表示这个模型用于聊天或对话系统,qlora
可能是微调方法的名称,sql
可能表示模型针对 SQL 相关任务进行了优化,e3_copy
可能是这个脚本或模型版本的特定标识。2
: 这个数字可能是传递给distributed_finetune_job.sh
脚本的参数,代表使用2台机器进行微调训练。训练后测试【训练管理】
这条命令使用
xtuner
工具将一个 PyTorch 模型转换为 Hugging Face Transformers 库兼容的格式。下面是命令各部分的详细解释:xtuner
:这是执行命令的程序或脚本的名称,它调用了xtuner
工具。convert pth_to_hf
:这是xtuner
工具的一个子命令,用于执行从 PyTorch 模型(.pth 文件)到 Hugging Face Transformers 格式的转换。/code/llama2_7b_chat_qlora_sql_e3_copy.py
:这个参数指定了 Python 脚本的路径,该脚本可能包含了模型转换所需的配置信息或者是一个转换模型的 Python 程序。/userhome/xtuner-workdir-job/iter_500.pth/
:这个参数指定了源 PyTorch 模型文件的路径。iter_500.pth
是模型在某个训练迭代(这里是第500次迭代)后的保存文件。/code/iter_500_hf/
:这个参数指定了转换后的模型文件将要保存的目录路径。转换后的模型将被保存在这个目录下,以便 Hugging Face Transformers 库可以加载和使用。总结来说,这个命令的作用是使用
xtuner
工具,通过指定的 Python 脚本/code/llama2_7b_chat_qlora_sql_e3_copy.py
,将位于/userhome/xtuner-workdir-job/iter_500.pth/
的 PyTorch 模型转换为 Hugging Face Transformers 格式,并保存到/code/iter_500_hf/
目录下。这样做的目的是为了能够在 Hugging Face 的生态系统中使用这个模型,例如在 Transformers 库中进行推理或进一步训练。由于final_test.py文件位于code目录下,所以要先转到code目录
调动文件
模型调试
开启模型调试
获取训练配置文件的绝对路径:
训练后测试【模型调试】
这条命令是用来将一个保存在 PyTorch 格式(.pth)的模型转换为 Hugging Face Transformers 库可以识别的格式。下面是命令各部分的详细解释:
xtuner
:这是一个命令行工具的名称,用于执行模型转换等任务。convert pth_to_hf
:这是xtuner
工具的一个子命令,用于将 PyTorch 模型(.pth 文件)转换为 Hugging Face Transformers 格式。/code/llama2_7b_chat_qlora_sql_e3_copy.py
:这个参数指定了 Python 脚本的路径,该脚本可能包含了模型转换所需的配置信息或者是一个转换模型的 Python 程序。/code/xtuner-workdir/iter_500.pth/
:这个参数指定了源 PyTorch 模型文件的路径。iter_500.pth
表示这是模型在第500次迭代后的保存文件。/code/iter_500_hf/
:这个参数指定了转换后的模型文件将要保存的目录路径。转换后的模型将被保存在这个目录下,以便 Hugging Face Transformers 库可以加载和使用。总结来说,这个命令的作用是使用
xtuner
工具,通过指定的 Python 脚本/code/llama2_7b_chat_qlora_sql_e3_copy.py
,将位于/code/xtuner-workdir/iter_500.pth/
的 PyTorch 模型转换为 Hugging Face Transformers 格式,并保存到/code/iter_500_hf/
目录下。这样做的目的是为了能够在 Hugging Face 的生态系统中使用这个模型,例如在 Transformers 库中进行推理或进一步训练。微调后模型下载并接入FastGPT
合并微调后的模型
把训练出来的lora模型与codellama模型合并。合并后的模型叫code-llama-sql(位于code目录下)(用cpu去做)
这条命令使用
xtuner
工具来合并两个模型文件,并将结果保存到一个新的目录中。这里是命令各部分的详细解释:xtuner
:这是执行命令的程序或脚本的名称,它调用了xtuner
工具。convert merge
:这是xtuner
工具的一个子命令,用于执行模型合并操作。这通常意味着将两个或多个模型的参数合并到一个模型中。/dataset/CodeLlama-7b-hf
:这个参数指定了第一个模型文件的路径。在这个例子中,它是一个已经转换为 Hugging Face Transformers 格式的模型。/code/iter_500_hf/
:这个参数指定了第二个模型文件的路径,这个模型是之前通过xtuner convert pth_to_hf
命令转换得到的。/code/code-llama-sql
:这个参数指定了合并后的模型文件将要保存的目录路径。--device cpu
:这个选项指定了合并操作应该在 CPU 上执行,而不是在 GPU 上。总结来说,这个命令的作用是使用
xtuner
工具将位于/dataset/CodeLlama-7b-hf
和/code/iter_500_hf/
的两个模型合并,并将合并后的模型保存到/code/code-llama-sql
目录下,整个过程在 CPU 上执行。这种合并操作用于整合不同模型的参数,或者将特定功能(如 SQL 处理能力)集成到基础模型中。下载合并后的模型到本地
在本机上创建找到xinference文件,如果没有需要自行创建
转到xinference文件下
在xinference文件里,创建一个名为code-llama-sql的文件夹,我们要将模型放在该文件里
在平台上获取文件的下载链接,接下来就可以使用wget或者直接使用浏览器下载
wget
:这是一个在命令行中用于下载文件的自由工具。"[http://hsw.csidc.cn/..."](http://hsw.csidc.cn/...")
:这是文件的 URL,也就是模型文件下载的链接,wget 将从这个地址下载文件。-O ./code-llama-sql/pytorch_model-00002-of-00007.bin
:这个参数告诉 wget 将下载的文件保存为 /code-llama-sql/pytorch_model-00002-of-00007.bin。如果 /code-llama-sql/ 目录不存在,wget 会尝试创建这个目录。使用Xinference部署下载的模型
首先,确保在xinference目录下
在xinference目录下,启动xinference
这个
docker run
命令用于在 Docker 中启动一个容器,该容器运行一个名为xinference
的服务。以下是命令各部分的详细解释:docker run -d
:这表示以分离模式(后台运行)启动容器。-e XINFERENCE_MODEL_SRC=modelscope
:这设置了一个环境变量XINFERENCE_MODEL_SRC
,其值为modelscope
。这可能用于指定模型的来源或存储位置。-v $(pwd)/.xinference:/root/.xinference
:这将当前目录下的.xinference
目录挂载到容器内的/root/.xinference
。$(pwd)
是一个命令替换,它被替换为当前工作目录的绝对路径。-v $(pwd):/home
:这将当前目录挂载到容器内的/home
目录。-v $(pwd)/.cache/huggingface:/root/.cache/huggingface
:这将当前目录下的.cache/huggingface
目录挂载到容器内的/root/.cache/huggingface
。-v $(pwd)/.cache/modelscope:/root/.cache/modelscope
:这将当前目录下的.cache/modelscope
目录挂载到容器内的/root/.cache/modelscope
。-p 9997:9997
:这将容器内的 9997 端口映射到宿主机的同一端口,允许外部访问。--gpus all
:这指定容器可以使用宿主机上的所有 GPU。registry.cn-hangzhou.aliyuncs.com/xprobe_xinference/xinference
:这是 Docker 镜像的完整名称,包括仓库地址、镜像名称和标签。这个镜像可能托管在阿里云的 Docker 仓库中。xinference-local -H 0.0.0.0
:这是容器启动后运行的命令。xinference-local
可能是一个可执行文件或脚本,-H 0.0.0.0
参数指定服务监听所有网络接口。总结来说,这个命令启动了一个 Docker 容器,该容器运行
xinference
服务,并且配置了多个卷挂载和环境变量,以便容器可以访问宿主机上的文件和目录。此外,它还映射了一个端口,允许外部访问服务,并且允许容器使用宿主机的所有 GPU 资源。打开xinference界面
找到“code-llama-instruct”模型,如下所示:
部署成功
接入FastGPT
更新FastGPT配置文件
退出xinference文件夹,在本地里找到Fastgpt文件,并转到该文件下
对fastgpt路径下的config.json文件进行编辑
将以下代码写入config.json文件里的LLM配置
重启fastgpt以生效刚刚更新的配置
接入OneAPI
打开One API
添加xinference渠道,如下图:
对部署的Xinference渠道进行测试
将模型接入FastGPT
打开FastGPT
创建简易应用
将code-llama-sql模型接入FastGPT
在训练平台里,复制prompt
粘贴到FastGPT里对大模型提问,大模型给出回答
这就完成啦。