8G 显存玩转书生大模型 Demo
基础任务打卡:部署InternLM2-Chat-1.8B 模型
这是书生浦语大模型实战入门第一个任务;部署并运行InternLM2-Chat-1.8B模型。(之前好像是部署7b的模型,但是可能是模型太大了,老是报错吧,后面就换成了1.8b小模型,小GPT果然丝滑多了
配置环境
创建开发机(10%的A100实在是有点慢…)
用conda clone克隆一个官方搭建完成的环境
conda create --name myenv --clone /root/share/pre_envs/icamp3_demo
简易脚本调用1.8b模型
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
model_name_or_path = "/root/share/new_models/Shanghai_AI_Laboratory/internlm2-chat-1_8b"
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, trust_remote_code=True, device_map='cuda:0')
model = AutoModelForCausalLM.from_pretrained(model_name_or_path, trust_remote_code=True, torch_dtype=torch.bfloat16, device_map='cuda:0')
model = model.eval()
system_prompt = """You are an AI assistant whose name is InternLM (书生·浦语).
- InternLM (书生·浦语) is a conversational language model that is developed by Shanghai AI Laboratory (上海人工智能实验室). It is designed to be helpful, honest, and harmless.
- InternLM (书生·浦语) can understand and communicate fluently in the language chosen by the user such as English and 中文.
"""
messages = [(system_prompt, '')]
print("=============Welcome to InternLM chatbot, type 'exit' to exit.=============")
while True:
input_text = input("\nUser >>> ")
input_text = input_text.replace(' ', '')
if input_text == "exit":
break
length = 0
for response, _ in model.stream_chat(tokenizer, input_text, messages):
if response is not None:
print(response[length:], flush=True, end="")
length = len(response)
指令调用
写了个坚简单的prompt让模型输出一篇小作文,质量虽然一般(混有不少歪曲事实的情况),但是至少技术链路先跑通啦
耗时312秒,还是挺慢的
指令:请给我生成一篇部署InternLM2-Chat-1.8B大模型的学习心得,要包括1.学习内容,2.遇到困难及解决思路,3.学习总结
### 学习心得
在学习InternLM2-Chat-1.8B大模型时,我收获了许多新的知识和技术,同时也遇到了一些挑战。下面我将从学习内容、遇到困难及解决思路、以及学习总结三个方面来分享我的学习心得。
### 学习内容
1. **模型介绍**:
- 介绍了InternLM2-Chat-1.8B大模型的整体架构、参数数量、训练策略等基本信息。
- 详细讲解了模型在情感分析、问答、对话生成等任务上的表现和优势。
2. **数据准备**:
- 介绍了如何准备训练数据集和验证集,包括数据清洗、标注、预处理等步骤。
3. **模型训练**:
- 详细介绍了如何通过PyTorch框架对模型进行训练,包括设置超参数、优化器、损失函数等。
- 演示了如何使用TensorBoard可视化训练过程,以及如何调整学习率、批次大小等超参数。
4. **模型评估**:
- 介绍了如何通过Keras API评估模型的性能,包括计算准确率、召回率、F1值等指标。
5. **模型调优**:
- 分析了为什么某些任务表现不佳,并提出了解决方案,如调整超参数、更换模型结构等。
### 遇到困难及解决思路
在训练过程中,我遇到了以下几个困难:
1. **训练不稳定**:
- 训练速度缓慢,需要花费较长时间才能收敛。
- 出现了过拟合问题,导致模型泛化能力下降。
2. **模型参数过多**:
- 模型参数数量庞大,计算量较大,训练时间较长。
- 难以选择合适的优化器和超参数。
3. **数据分布不均**:
- 训练数据分布不均匀,导致模型对某些特定样本的预测结果不准确。
- 难以找到合适的正则化方法来缓解过拟合问题。
针对这些困难,我采取了以下解决思路:
1. **调整超参数**:
- 通过网格搜索等方法寻找最优的超参数组合。
- 尝试不同的学习率、批量大小等超参数组合。
2. **更换模型结构**:
- 尝试不同的模型架构,如卷积神经网络、循环神经网络等。
- 通过实验找到最适合特定任务的模型结构。
3. **数据增强**:
- 对数据进行随机扰动,增加数据的多样性。
- 使用数据增强技术来缓解过拟合问题。
### 学习总结
通过这次学习,我对InternLM2-Chat-1.8B大模型有了更深入的了解。虽然遇到了一些困难,但通过不断尝试和调整,最终成功训练出了一个稳定、高效且准确的模型。这次学习不仅让我掌握了大模型训练的基本技巧,还让我更加深入地理解了深度学习在自然语言处理领域的应用。我相信,通过不断学习和实践,我将能够更好地应用大模型来解决实际问题。