大模型之路1:趟一条小路


在人工智能的浪潮中,大模型以其强大的性能和广泛的应用前景,成为了研究者和开发者们关注的焦点。作开源大语言模型的代表,LIama2是典型的代表。不过我暂时用的是Baichuan2-13B-Chat做的测试。本文主要是介绍如何尝试搭建Baichuan2-13B-Chat的软硬件环境,为探索大模型之路趟一条小路。

一、硬件准备

搭建大模型环境首先需要有足够的硬件支持。由于大模型训练和推理过程中涉及大量的数据计算和存储,因此对计算资源的要求较高。在准备硬件时,应重点考虑以下几个方面:
处理器:选择高性能的CPU,以保证模型训练和推理的速度。
内存:大模型通常需要较大的内存空间来存储中间数据和模型参数,因此建议配备足够的RAM。
存储:确保有足够的硬盘空间来存储训练数据、模型文件和日志等。
显卡:对于支持GPU加速的大模型,配备高性能的显卡可以显著提升训练和推理的效率。
参考推理的效果:
(1)在笔记本上曾经跑起来过7B和7B-4bit模型,当然,速度是很慢的。当时配置是 10885(i9)+2080Super+96G内存(这个不是必须),对话的时候,大概1-3分钟回答一句吧。13B的模型是跑不起来的。
(2)在台式机(刃9000K),13900KF + 4080 + 96G内存,对话大概1分钟以内
(3)在一个服务器上,CPU频数不高,忘了,3090的卡,对话大概不到1分钟
(4)在新服务器上,用的是8*A800的小型环境,之前的7B没尝试,直接上的13B,感觉十来秒就能对话。而且回答内容明显效果要比7B的好。
个人感觉,自用的桌面电脑,最好采用14900K+4090+128G内存+液冷,相对来说性价比还是比较高的,现在192内存有点太贵了不合适。当然,对CPU和GPU的液冷也是个人偏见,感觉似乎更安静一点点,长期用的安全性还请大神指点。


二、软件环境搭建

软件搭建过程涉及多个步骤,包括环境配置、模型下载与安装、以及必要的依赖库的安装等。

操作系统:之前笔记本上是在Win+PyCharm环境上尝试的,能debug就很棒,起码不用频繁的每次等待加载模型。
深度学习环境配之前,首先查看硬件配置 nvidia-smi,安装合适的框架版本,PyTorch等都是有对应的。
环境配置:各家的LLM需要安装特定的深度学习框架和库,如PyTorch、Transformers等。国内推荐清华源。最近我用阿里源总不成功,不知道是什么原因。
模型下载与安装:要么从官方渠道下载Baichuan2-13B-Chat的模型文件,并按照官方提供的指南进行安装和配置。
        我是从modelscope 魔搭下载的,感觉速度还可以。
pip install modelscope  这个好像用conda装不上,要用pip安装

或者pip install  指定源
pip install modelscope  -i https://mirrors.aliyun.com/pypi/simple

conda install Pillow   # 这个是解决 import PIL.Image 出错的包
pip install accelerate
conda install sentencepiece
依赖库安装:根据模型的需求,安装必要的依赖库,如用于数据处理、模型训练、推理加速等库。
最好把原生的requirement文件整理一下,像pytorch等库可能原生推荐的版本不是特别符合你的环境。
如果硬盘空间足够,最好还是多做几个环境。比如如果已经有了虚拟环境,并且安装了torch等,可以复制一个
conda create --name LLM_torch  --clone py39torch


三、环境优化与调试

在服务器上,到目前来说尝试的不多。推荐大家使用JupiterNotebook, 这样可以一次加载模型,进入的是类似PyCharm的调试状态,能节约时间,相对来说感觉好一点的。

# 尝试微调 baichuan2 13b-chat

import warnings
warnings.filterwarnings('ignore')
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM,AutoConfig, AutoModel, BitsAndBytesConfig
from transformers.generation.utils import GenerationConfig
import torch.nn as nn
from IPython.display import clear_output


#使用QLoRA引入的 NF4量化数据类型以节约显存
model_name_or_path ="/home/liangzhen/data/LLM/baichuan/Baichuan2-13B-Chat/" #远程 'baichuan-inc/Baichuan-13B-Chat'

bnb_config=BitsAndBytesConfig(
            load_in_4bit=True,
            bnb_4bit_compute_dtype=torch.float16,
            bnb_4bit_use_double_quant=True,
            bnb_4bit_quant_type="nf4",
            llm_int8_threshold=6.0,
            llm_int8_has_fp16_weight=False,
        )

tokenizer = AutoTokenizer.from_pretrained(
   model_name_or_path, trust_remote_code=True)

model = AutoModelForCausalLM.from_pretrained(model_name_or_path,
                quantization_config=bnb_config,
                trust_remote_code=True)

model.generation_config = GenerationConfig.from_pretrained(model_name_or_path)

print('generating is OK.')

print('测试一个问题:')
messages = []
messages.append({"role": "user",
                 "content": "一句话概况油气公司的测井业务"})
response = model.chat(tokenizer,messages=messages,stream=True)
for res in response:
    print(res,end='\r')
    

print('')

prefix = ''

print('测试命名实体识别 (Named Entity Recognize)')
def get_prompt(text):
    return prefix+text+' -> '

def get_message(prompt,response):
    return [{"role": "user", "content": f'{prompt} -> '},
            {"role": "assistant", "content": response}]
    
messages  = [{"role": "user", "content": get_prompt("井001由西部钻探克拉玛依钻井公司12345队承担钻井施工任务,由西部钻探克拉玛依录井工程公司L234队承担地质录井任务,录井仪器为SW-888综合录井仪")}]
response = model.chat(tokenizer, messages)
print(response)

print('')
print('测试NER')
messages = messages+[{"role": "assistant", "content": "{'井号': ['井001']}"}]
messages.extend(get_message("井001由X钻井公司12345队承担钻井施工任务","{'井号': ['井001'], '公司':['X钻井公司'], '工作队':['12345队'], '工作任务':['钻井施工']}"))
messages.extend(get_message("由Y录井工程公司L234队承担地质录井任务","{'公司':['Y录井工程公司'], '工作队':['L234队'], '工作任务':['地质录井']}"))
messages.extend(get_message("设计任务由M公司N项目经理部承担。","{'公司':['M公司'], '工作队':['N项目经理部'], '工作任务':['设计']}"))
print(messages)


print('END')

 

相关推荐

  1. 模型1

    2024-04-01 17:38:06       18 阅读
  2. 『Linux升级』进度程序

    2024-04-01 17:38:06       29 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-01 17:38:06       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-01 17:38:06       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-01 17:38:06       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-01 17:38:06       18 阅读

热门阅读

  1. 关于python中常用命令(持续更新中)

    2024-04-01 17:38:06       21 阅读
  2. 2024.2.9力扣每日一题——二叉树的最近公共祖先

    2024-04-01 17:38:06       15 阅读
  3. SpringAOP和AspectJ有什么关系 ?

    2024-04-01 17:38:06       18 阅读
  4. ActiViz中的数据存储vtkDataArray

    2024-04-01 17:38:06       20 阅读
  5. 第八章 贪心算法 part06

    2024-04-01 17:38:06       16 阅读