Ubuntu22.04本地部署qwen模型、jupyterlab开发环境、LoRA微调全流程

前言

这段时间在自己的Win11系统上部署了chatGLM以及Qwen模型,进行对话、推理以及工具调用都没有问题,但是在尝试进行微调的时候发现好像并不能成功,因此花费了很大的力气,又分别在ubuntu桌面版、windows子系统WSL2 Ubuntu上部署了Qwen模型,并尝试进行LoRA的微调实践。

由于过程比较多,步骤较为繁琐,我可能会分几个部分进行叙述。首先介绍一下我的两个环境(平民玩家,勿喷):

一台笔记本安装的Ubuntu22.04桌面版:

显卡是1070M 8G

一台台式电脑,安装的Win11系统、WSL2(Ubuntu22.04分发版)

显卡是4060Ti 16G

下边开始安装配置,对于windows系统来说是WSL2上的Ubuntu,下边我简称WSL2。

开始配置环境

第一步:安装python环境

在大模型的开发中,首选conda环境,因为conda提供了对于科学计算以及常用的所有的包,免去了我们安装大量的第三方库的问题。

首先到到anaconda的官方地址:

https://repo.anaconda.com/archive/

选择一个需要安装的conda包,对于大模型开发,首选python3.11版本的conda,如下所示:

在Ubuntu22.04桌面版上不用说,下载后,直接在downloads文件夹下打开终端:

sh 下载的包名(在Linux系统上输入前几个字母,例如An按tab键就可以补全了)

WSL2环境,可以先通过windows系统下载好文件,再移动到Linux环境中(可以在资源管理器中找到),例如这样:

采用windows终端打开Ubuntu:

或者直接点击也行:

再切换到你放置conda包的地方,同样使用:

sh 下载的包名

就可以开始安装。

安装过程就是一直按enter:

最后一步要输入yes

再输入yes,不能按得太快,默认不接收协议就退出安装了。

安装完成:

在Ubuntu桌面版可以直接输入:python -V查看python版本

这就是默认将conda环境作为系统的默认python解释器了。

WSL2,我直接输入python,发现系统并不能识别python命令,通过查询,需要激活conda环境:

 source /home/<用户名>/anaconda3/bin/activate

请<用户名>为自己的。

输入之后就发现光标前面多了一个base,证明conda已经启用:

第二步:安装CUDA

CUDA是英伟达专为深度学习设计的加速库,广泛应用与当前的大模型开发中,因此必须要安装CUDA。这个也说明,要进行大模型的研究,只能选用N卡,A卡是不能够进行训练或者推理的。

我们直接输入:

nvcc --version

看看机器是否已经安装了CUDA,如果下图所示:

这就是没有安装,这里Ubuntu提示使用sudo apt install nvidia-cuda-toolkit 去安装该库。这个我已经替大家试过了,采用这个命令,它默认安装的是CUDA11.5:

而不管你是什么显卡,CUDA11.5对于后续的开发是不够的,因此不能采用这种方法。

正确的安装方法如下:

需要到网址:

CUDA Toolkit 12.4 Update 1 Downloads | NVIDIA Developer

按照自己的需要选择CUDA版本。

先查看自己的显卡支持的最高cuda:

nvidia-smi

右侧出现CUDA Version就是当前环境能够支持的最高CUDA版本。

1070M显卡在Ubuntu22.04上居然支持CUDA12.2,也是相当可以(我记得之前安装Ubuntu18.04的时候最高只能支持11.几):

4060Ti能够支持最新版本12.4

安装网页的指示一步一步的执行:

安装完成之后需要手动修改环境变量!!

vi ~/.bashrc

按i键开始插入内容 按↓键滑到文末,复制以下内容:

export PATH=$PATH:/usr/local/cuda/bin

然后重启WSL2:

wsl --shutdown

wsl -d Ubuntu

再输入nvcc -V就可以看到已经安装成功了:

如果安装错了CUDA版本,例如之前使用sudo apt install nvidia-cuda-toolkit 安装的,可以通过以下命令卸载以安装的,再进行重装即可:

(我之前就采用默认命令安装,导致后续的问题,因此需要重装,开始竟然一时找不到卸载CUDA的方法,这个是在官方文档中找到的,采用以下三个步骤: )

bash 复制代码
sudo apt-get --purge remove "*cuda*" "*cublas*" "*cufft*" "*cufile*" "*curand*" \
 "*cusolver*" "*cusparse*" "*gds-tools*" "*npp*" "*nvjpeg*" "nsight*" "*nvvm*"
 
 sudo apt-get --purge remove "*nvidia*" "libxnvctrl*"
 
 sudo apt-get autoremove

(对于WSL2执行这些命令后,这里有个提示,如果是WSL2采用了以上卸载命令,发现虽然CUDA已经卸载完了,但是我们电脑的C盘空间还是没有变多。这是由于WSL2采用的虚拟盘只能扩大,不能自动缩容,需要手动进行压缩,大家可以自行百度解决。)

由于我的笔记本只能支持12.2所以转到历史版本:

我这里选择12.2.0:

按照给出的命令依次执行:

bash 复制代码
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin

sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600

wget https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda-repo-ubuntu2204-12-2-local_12.2.0-535.54.03-1_amd64.deb

sudo dpkg -i cuda-repo-ubuntu2204-12-2-local_12.2.0-535.54.03-1_amd64.deb

sudo cp /var/cuda-repo-ubuntu2204-12-2-local/cuda-*-keyring.gpg /usr/share/keyrings/

sudo apt-get update

sudo apt-get -y install cuda

执行完之后也需要修改环境变量:

bash 复制代码
vi ~/.bashrc

环境变量修改完之后,载入配置文件:

source ~/.bashrc

再输入nvcc -V,安装成功:

第三步:安装CUDNN(这个可以不安装)

网址:

cuDNN Archive | NVIDIA Developer

选择一个版本:

解压

bash 复制代码
xz -d cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz
tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar

将解压后的文件夹重命名

bash 复制代码
mv cudnn-linux-x86_64-8.9.7.29_cuda12-archive cuda

移动文件:

bash 复制代码
sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp -P cuda/lib/libcudnn* /usr/local/cuda/lib64 

添加权限:

bash 复制代码
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*

ok,到这里CUDNN就安装完成了,至于怎么验证是否安装成功吧,咳咳,我也不知道...反正下边的命令对我来说没用:

bash 复制代码
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

开发环境配置

桌面版可以安装pycharm,我们这里介绍jupyter-lab配置

jupyter-lab配置

这块主要是为了在windows上去方便的修改WSL2上面的文件,如果是在Ubuntu桌面版上可以直接安装pycharm,但是jupyterlab在某些方面是非常的方便,还是很推荐的,当然你也可以在pycharm中建立jupyternotebook也是一样的。

直接输入命令进行安装:

bash 复制代码
pip install jupyterlab

如果是桌面版再输入:jupyter-lab即可启动,也不需要过多的配置:

如果是WSL2,在Ubuntu上安装的jupyter-lab需要在windows上访问需要以下的配置:

我们启动后,在本地访问后看到,需要提供密码:

我们需要做一些额外的配置。

远程加密设置jupyterlab访问密码的方法

bash 复制代码
from jupyter_server.auth import passwd
passwd()

记录生成的密文

生成配置文件:

bash 复制代码
jupyter lab --generate-config

使用Vim编辑器打开该文件

bash 复制代码
vim /home/renjintao/.jupyter/jupyter_lab_config.py

/password =进行查找

按enter键定位到

按i进行插入修改,填入之前生成的密文密码:

你也可以采用同样的方式设置其他的配置:

bash 复制代码
ServerApp.allow_origin = '*'

ServerApp.allow_remote_access = True

ServerApp.ip = '0.0.0.0'

ServerApp.open_browser = False

ServerApp.password = '加密后的密码'

ServerApp.port = 8002  *# 如果这里的端口没有修改,它还是默认的8888*

修改完成后输入:wq保存退出。

启动命令:

bash 复制代码
jupyter-lab

或者,采用后台启动的命令:

bash 复制代码
nohup jupyter lab --allow-root > jupyterlab.log 2>&1 &

本地打开浏览器

127.0.0.1:8888

输入自己设置的密码即可访问:

设置jupyter-lab的默认启动位置:

创建配置文件

bash 复制代码
jupyter notebook --generate-config

用vim编辑器打开该文件:

bash 复制代码
vim /home/<用户名>/.jupyter/jupyter_notebook_config.py

先按下/

输入:c.NotebookApp.notebook_dir

enter

i

修改如下:

保存退出

bash 复制代码
:wq

重启jupyter Lab的命令(针对后台启动的方式,如果直接采用jupyter-lab的方式启动的,按Ctrl+C停止进程,再次输入jupyter-lab即可)

先查看进程:

bash 复制代码
ps aux | grep jupyter

杀死进程:

bash 复制代码
kill -9 进程号

再次启动:

bash 复制代码
nohup jupyter lab --allow-root > jupyterlab.log 2>&1 &

可以按到jupyter Lab已经默认启动到需要的路径下了:

到目前为止机器的运行环境,以及我们要用到的编程环境都差不多了,下一部分将开始建立具体大模型的运行环境。

开始部署

建立虚拟环境

建立Qwen的虚拟环境

bash 复制代码
conda create -n qwen python=3.11

切换到虚拟环境

bash 复制代码
conda activate qwen

克隆项目文件

bash 复制代码
git clone https://github.com/QwenLM/Qwen

安装依赖文件

bash 复制代码
cd Qwen
​
pip install -r requirements.txt

安装GPU版本pytorch

到网址:

Start Locally | PyTorch

找到匹配cuda版本的pytorch版本安装命令:

12.x版本

bash 复制代码
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

11.x版本

bash 复制代码
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

非常快速的安装完成:

验证pytorch是否安装成功

输入python进入到解释器环境:

bash 复制代码
import torch
print(torch.__version__)
print(torch.cuda.is_available())

如果输出是True,则安装成功

配置jupyterlab

为虚拟环境建立kernel

bash 复制代码
conda install -n qwen ipykernel

将虚拟环境的kernel写入jupyterlab

bash 复制代码
python -m ipykernel install --user --name qwen --display-name qwen

再重启一下jupyterlab

下载模型

通过魔搭社区下载模型文件,执行下载命令前先安装:

bash 复制代码
pip install modelscope

方法1:Ubuntu桌面版采用:用pycharm打开项目,设置环境变量:

新建一个py文件:

写入以下代码:

bash 复制代码
#模型下载
from modelscope import snapshot_download
model_dir = snapshot_download('qwen/Qwen-1_8B-Chat', cache_dir='./model', revision='master')

右键运行,开始下载:

下载完成

下载到本文件夹下的路径:

方法2:采用jupyterlab

在右侧notebook中输入

bash 复制代码
#模型下载
from modelscope import snapshot_download
model_dir = snapshot_download('qwen/Qwen-1_8B-Chat', cache_dir='./model', revision='master')

点击运行

下载完成,可以看到本地路径下出现:

我们WSL2这边顺带再下载一个7B模型

bash 复制代码
#模型下载
from modelscope import snapshot_download
model_dir = snapshot_download('qwen/Qwen-7B-Chat', cache_dir='./model', revision='master')

运行

下载成功。

启动大模型测试

命令行脚本

修改cli_demo.py脚本中的本地模型路径:

bash 复制代码
DEFAULT_CKPT_PATH = './model/qwen/Qwen-1_8B-Chat'
DEFAULT_CKPT_PATH = './model/qwen/Qwen-7B-Chat'

jupyterlab修改

启动模型试试:

成功启动模型,再对话试试:

或者在终端输入:

bash 复制代码
python cli_demo.py

启动成功:

WSL2(16G显存)上测试一下7B模型:

再次运行:

bash 复制代码
python cli_demo.py

加载就慢很多了:

对话的反应也很慢:

测试网页demo

需要安装相应的依赖:

bash 复制代码
pip install -r requirements_web_demo.txt

再启动web-demo试试:

pycharm:

jupyterlab

注意我这里是7B模型

启动网页脚本:

bash 复制代码
python web_demo.py

启动成功。

打开浏览器,输入127.0.0.1:8000访问

显卡监控命令

bash 复制代码
nvidia-smi

或者每秒查看一次进行监控:

bash 复制代码
watch -n 1 nvidia-smi

1.8模型下的显卡占用:

7B模型下的显卡占用:

flash-attention安装

注意到之前在启动模型时,提示:

这就是没有安装flash-attention,flash-attention是一种推理加速框架。

flash-attention主要进行计算层的并行优化。

!! 在多次尝试后发现我的4060Ti根本用不了flash-attention2,非常的郁闷,等到后期用到GTX 3090、4090以及更高规格的显卡,再进一步尝试吧!!

安装方法如下:

先安装依赖包

bash 复制代码
pip install packaging
pip install ninja

Releases · Dao-AILab/flash-attention (github.com)

下载flash-attention库的预编译包

按照自己的pytorch版本、cuda以及python版本下载版本

例如pytorch2.3,CUDA 11.X,python3.11版本:

pytorch2.3,CUDA 12.X,python3.11版本

如果不知道自己的torch版本

在jupyterlab中输入:

pip list

可以用wget命令

下载好了安装包,放到一个文件中:

我的WSL2,也可以直接windows上下载好了,直接放到Ubuntu文件中去:

再切换到目录:

安装预编译文件:

pip install 该安装包名

bash 复制代码
pip install flash_attn-2.5.7+cu122torch2.3cxx11abiTRUE-cp311-cp311-linux_x86_64.whl

成功安装:

再回到之前的qwen文件夹:

克隆flash-attention项目文件

bash 复制代码
git clone https://github.com/Dao-AILab/flash-attention

网络不好的时候可能需要多尝试几次:

cd到该文件夹:

bash 复制代码
cd flash-attention/csrc/layer_norm

将需要的另外的组件,预编制到当前机器上:

bash 复制代码
MAX_JOBS=4 python setup.py install

如果之前安装默认的CUDA 这里会提示:

CUDA 11.6以下的版本不支持flash-attention!!!

正确安装的界面如下:

相关推荐
Vae_Mars2 分钟前
WPF中的switch选择
开发语言·c#
我的运维人生7 分钟前
Python技术深度探索:从基础到进阶的实践之旅(第一篇)
开发语言·python·运维开发·技术共享
Bonne journée8 分钟前
‌在Python中,print(f‘‘)是什么?
java·开发语言·python
Two_brushes.21 分钟前
C++ list 容器类的模拟实现
开发语言·c++·list
iiimZoey33 分钟前
Dit架构 diffusion范式分类+应用
人工智能·python
R三哥哥啊34 分钟前
【树莓派5B】IO串口通信使用
python
王俊山IT36 分钟前
C++学习笔记----8、掌握类与对象(五)---- 嵌套类与类中枚举
开发语言·c++·笔记·学习
Bruce_Li_Q36 分钟前
C语言贪吃蛇
c语言·开发语言
互联网时光机1 小时前
python写的window小工具-一键设置ip自动获取ip
网络·windows·python
SCBAiotAigc1 小时前
VSCode debug模式无法跳转进入内置模块
人工智能·vscode·python