给我一分钟,教你推理+训练GLM4全系列模型

你有没有想过,如果你喜欢的虚拟角色能和你聊天,会是什么样子?大语言模型就是这样一个聪明的“AI好友”——你问它问题,它能给你答案;你给它一段内容,它能回应你的想法。这不仅是一个人工智能,更像是一个了解你的聪明的伙伴。如果你有你喜欢角色的对话数据,甚至可以训练出任何一个性格的人。例如通过此镜像,训练而出的模型:

在中文开源大模型中。GLM-4系列模型特别出色。实际使用加训练上百次之后。我认为它有着很不错的质量。不管是知识储备比前几代更完善,还是在理解能力上。又或者是微调中。都能明显感觉出来这些能力大大提高了。但是有许多人因为各种原因。部署环境报错、模型训练出现bug、数据集格式不对等等等等。让新手使用门槛极其之高。基于此,我制作了一个全一键调用的镜像。配置好所有的模型和环境,全部功能全都为一键使用。

所以接下来我就向大家介绍如何推理+训练glm4系列模型。

这里我推荐使用Autodl:AutoDL算力云 | 弹性、好用、省钱。租GPU就上AutoDL

打开链接后,你会看见这个界面,我们在第1步那里推荐选择西北B区,当然别的地区也可以。显卡可以选择4090D 或者3090 也可以选择例如L40或者更大显存的显卡。这里我推荐选择4090D。

继续往下滑,按照图片的顺序提示选择,最后点击立即创建,如果点击立即创建后提示:该主机已租满,请更换主机重新创建实例。那么就是你当前选择的显卡被别人抢先选择了,可以选下面几个,或者刷新一下,重新选一个机子。

当你点击加载后,会直接跳转到这个界面,我们直接点击这个JupyterLab

稍等片刻,即可看见操作界面

里面所有的环境和模型以及推理+训练的功能我全部都配置好了,即开即用。

我们复制这个指令:bash /root/chuli/tnt.sh 

然后点击那个终端图标,然后将其输入到终端

稍等片刻,即可加载模型并与其对话,你可以直接在终端和glm4-9b-chat对话:

想要退出对话,可以在模型对话里直接输入:exit  即可退出和模型的对话,同时释放显存。

接下来我们点开左侧的推理.txt

这是其中的界面

如果我们想要继续使用之前的glm-4-9b-chat 那么直接在终端输入:bash /root/chuli/推理/终端.sh

就可以了。如果想要使用别的模型可以按照文章提示选择自己想要的模型。如果你没有下载,也没有关系,输入指令。模型会自动帮你下载,下载完自动推理。实现真正的一键部署。

其中我用一个glm-4v-9b展示一下,首先前往终端,输入:bash /root/chuli/推理/多模态推理.sh

我们会发现,它提示我们没有模型,这里就可以直接输入yes

模型会马上开始帮你下载,而且速度非常快,一分钟都不需要就可以马上下好。下面就是最终的样子:

这里提示我们输入图片名字

因为glm-4v-9b是一个多模态模型,是可以识别图片的。所以我们可以上传一张图片让它去识别。我们只需要选一张jpg格式的图片,然后在左边界面,打开“图片存放”这个文件夹,将图片拖到里面,然后名字建议改成英文的。

例如像我这样:aaa、bbb、ccc这种。

上传好了之后,我们只需要在终端的输入图片名字:aaa (或者你自己图片的名字)

然后回车,下面就可以和模型讨论你上传的图片了。

如果想要退出还是一样在对话里输入exit  即可退出。

下面我们来介绍如何训练模型。

本镜像支持:单/多轮训练、ptuning_v2、lora 训练方式。

我们打开左侧的训练.txt

文件打开后是这样的:

由于其中的训练方式有很多,所以我这里就选择其中一种来介绍,其余的内容可以自行操作,里面的教程也十分的简单。

这里我就先介绍单轮对话lora微调。

首先,我们需要准备好数据集,数据集的格式是这种样式的:

问:你喜欢我吗?
答:我喜欢你,可以先把枪放下好吗。

问:为什么AI进步的这么快?
答:因为大公司有钱,有资源。

数据集做好之后,打开左侧的 数据集全自动处理文件夹

打开之后我们继续选择 问答对处理.txt

你可能会发现这个文件里面有很多已经有了的数据集。

这实际上是我提前放进去的文件,方便一些懒得做数据集的人可以直接使用,当然,你也可以全删除,替换成自己的。

你的数据集做好之后,记得ctrl+s 保存。

然后接下来就可以直接在终端输入:python /root/chuli/微调/lora微调/一条龙.py

这个指令是会将你的数据集处理,自动转换成模型可以训练的格式。

到了这一步后,其实就已经完成了一大半了,剩下的就是配置训练参数和最终的训练了。这部分也很简单。

我们在左侧的页面依次点开:

其中这个lora.yaml 就是我们的训练配置文件,我们可以在这里面调整模型的训练参数。方便我们调试。

对于参数,我们先不聊那么多,其中就介绍两个主要的参数:max_steps 以及 save_steps

其中max_steps的意思就是模型的总训练步数。我在这里选择了2500步,你如果想调整也可以自己改动。

然后save_steps的意思是模型多少步会保存一次的意思,这里我输入的是50 也就是说,模型每50步的时候,会保存一次。这个你也可以自己改动。

当然,即使什么都不改也可以。如果改好了记得保存。

最后,我们就可以开始训练了,我们来到终端,

输入:bash /root/chuli/微调/lora微调/lora训练.sh

即可一键开始训练:

可以发现,模型现在就是开始训练了。但是有些同学可能就要问了:我到底什么时候结束训练呀?

是等进度条跑完吗? 

回答:不需要,我们可以观察下面的那个红框,就用我图片里面的输出举例:

{'loss': 3.2656, 'grad_norm': 2.828125, 'learning_rate': 0.00019920000000000002, 'epoch': 0.23}                                                                                                                                                
{'loss': 2.8172, 'grad_norm': 4.125, 'learning_rate': 0.0001984, 'epoch': 0.45}                                                                                                                                                                
{'loss': 2.5875, 'grad_norm': 2.28125, 'learning_rate': 0.0001976, 'epoch': 0.68}                                                                                                                                                              
{'loss': 2.7672, 'grad_norm': 2.578125, 'learning_rate': 0.0001968, 'epoch': 0.91}                                                                                                                                                             
{'loss': 2.5266, 'grad_norm': 3.0, 'learning_rate': 0.000196, 'epoch': 1.14}          

这些内容里面只需要关注loss后面的内容。其中你会发现loss是处于一个下降的状态。这就代表模型在不断的学习你的数据集。loss越低证明模型学习的越好。但是!并不是loss越低越好。过犹不及。我自己个人的训练经验,我们最好在loss输出到1.4~0.7 这个范围内手动停止训练。

例如看到这个输出区间,里面的loss已经降到我们说的那个区间了,那么其实现在就可以停止训练了。停止训练就直接在终端上面:ctrl+c  然后不停的按回车就可以了。

然后,还记得之前我设置的每50步保存一次模型吗?里面如果你仔细看左侧,都是每隔50步就保存一次模型。那么我们就很清楚我们当前红框里面的模型是第几步了——第200步的模型

下面我们就可以开始推理自己训练的模型了,在左侧的界面打开finetune_demo

里面的界面是这样的:

我们打开output文件夹,这里面的所有文件都是你刚刚保存的模型,后面的数字就是不同步数下保存的模型。刚刚的200步就是:checkpoint-200这个文件

返回这个界面,打开推理.py文件

推理.py文件里面。关注第33行。将模型保存点换成:checkpoint-200

就像这样:

然后就可以了,记得保存。

最后我们直接在终端里面输入:bash /root/chuli/微调/lora微调/推理.sh

就可以和训练后的模型对话了。

同样的,我们可以输入exit结束对话。

那么,这里又有人要问了。我的这个训练好的模型,好像是加载保存点形式的呀?该怎么合并呢?

其实,将训练好的模型和主模型合并也十分的简单。

来到这个界面,打开: 合并.py 

其中:“模型载点”  就是和之前的模型保存点是一个意思,然后xxx就是你最终合并的模型名字。这里我给你取名了xxx 这个名字。你可以改成你喜欢的,或者不改。

改好后记得保存:

然后再终端里输入:bash /root/chuli/模型合并/合并.sh

即可开始合并模型

最后模型保存后的路径是:autodl-tmp/xxx   这个路径下面

最后,可能还有同学要问了,我想要把合并好的模型部署成API,然后调用。而且我还想在这个云服务器上,调用到我的本地机子上推理,可以吗?

当然可以!

我们还是在左侧这个界面,打开API.py 

其中我们在代码文件里面滑到最下面,这个里面红框标注的是glm-4-9b-chat原模型的路径。

但是既然我们是要使用微调后的模型,就不可以用原模型的路径了。所以我们换成之前合并好模型的路径

最后直接在终端输入:bash /root/chuli/API/API.sh

这里你可能会发现模型开始下载依赖,这是正常的,因为API需要额外的依赖,可以稍等2分钟。等待下载好之后,会自动生成API端口

在等了2分钟后,发现模型已经输出了端口号:http://0.0.0.0:6006

但实际上,这个端口号我们不能在外部使用,因为这是此镜像独有的端口,所以我们还得再做一步

回到这个界面,点击自定义服务

然后再点击访问

你可能进去后只能看见一片空白,这是正常的,我们要做的就是双击这个网址,然后将这个网址复制下来,例如我的就是:https://u183410-8642-ecd0cded.westb.seetacloud.com:8443/

记住这个网址。然后现在如果你本地有python 的话,可以使用我这个调用代码:

import requests
import json

def send_message(prompt, history):
    url = "输入你的那个网址"
    headers = {'Content-Type': 'application/json'}
    data = {
        "prompt": prompt,
        "history": history
    }
    response = requests.post(url, headers=headers, data=json.dumps(data))
    if response.status_code == 200:
        return response.json()
    else:
        print(f"Error: Received status code {response.status_code}")
        return None

def main():
    # 定义一个系统消息,作为上下文的一部分
    system_message = {"role": "system", "content": "你是一个有个性的AI"}
    # 初始化历史记录并添加系统消息
    history = [system_message]
    while True:
        user_input = input("You: ")
        if user_input.lower() == 'quit':
            print("Exiting conversation.")
            break
        response_data = send_message(user_input, history)
        if response_data:
            print("AI:", response_data['response'])
            # 维护历史记录,包括用户输入和AI响应
            history.append({"role": "user", "content": user_input})
            history.append({"role": "assistant", "content": response_data['response']})

if __name__ == "__main__":
    main()

其中在url那行后面输入你刚刚复制的网址,就像这样:

import requests
import json

def send_message(prompt, history):
    url = "https://u183410-8642-ecd0cded.westb.seetacloud.com:8443/"
    headers = {'Content-Type': 'application/json'}
    data = {
        "prompt": prompt,
        "history": history
    }
    response = requests.post(url, headers=headers, data=json.dumps(data))
    if response.status_code == 200:
        return response.json()
    else:
        print(f"Error: Received status code {response.status_code}")
        return None

def main():
    # 定义一个系统消息,作为上下文的一部分
    system_message = {"role": "system", "content": "你是一个有个性的AI"}
    # 初始化历史记录并添加系统消息
    history = [system_message]
    while True:
        user_input = input("You: ")
        if user_input.lower() == 'quit':
            print("Exiting conversation.")
            break
        response_data = send_message(user_input, history)
        if response_data:
            print("AI:", response_data['response'])
            # 维护历史记录,包括用户输入和AI响应
            history.append({"role": "user", "content": user_input})
            history.append({"role": "assistant", "content": response_data['response']})

if __name__ == "__main__":
    main()

最后,我们直接运行,就可以在本地机子上推理模型了:

这里我们就结束了,实际上这个镜像还有很多的功能,只是要一一全部介绍就实在太长了,所以我推荐直接自己根据镜像内容的文件教程自己操作。我在文件里面写的很详细,全都是输入指令的方式。非常方便。此镜像会不断的更新,后续更新会加入:

1.多模态模型的微调
2.function calling工具调用
3.多卡训练
4.全参数微调
5.vllm部署

敬请期待!

  • 18
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评估GLM模型的拟合效果可以使用多个指标,如残差分析、模型检验和预测能力等。以下是一些评估拟合效果的常见指标和相应的代码示例: 1. 残差分析: ```R # 拟合GLM模型 model <- glm(formula, data = dataset, family = binomial) # 获取残差 residuals <- residuals(model) # 绘制残差图 plot(residuals) ``` 在上面的代码中,您需要将"formula"替换为您的GLM模型的公式,"dataset"替换为您的数据集名称。然后,您可以通过计算残差并绘制残差图来评估模型的拟合效果。 2. 模型检验: ```R # 拟合GLM模型 model <- glm(formula, data = dataset, family = binomial) # 进行模型检验 summary(model) ``` 在上面的代码中,您需要将"formula"替换为您的GLM模型的公式,"dataset"替换为您的数据集名称。然后,通过运行summary()函数,您可以获取模型的详细统计信息,包括系数估计、显著性检验和模型拟合信息。 3. 预测能力评估: ```R # 拟合GLM模型 model <- glm(formula, data = dataset, family = binomial) # 进行交叉验证 cv_results <- cv.glm(data = dataset, glmfit = model, K = 10) # 输出交叉验证结果 print(cv_results) ``` 在上面的代码中,您需要将"formula"替换为您的GLM模型的公式,"dataset"替换为您的数据集名称。然后,通过运行cv.glm()函数进行交叉验证,并使用print()函数输出交叉验证的结果。交叉验证可以评估模型的预测能力和泛化能力。 请注意,以上代码示例是一般性的示例,具体评估指标和方法可能因应用场景和数据类型的不同而有所变化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值