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!!!

正确安装的界面如下:

相关推荐
databook8 小时前
Manim实现闪光轨迹特效
后端·python·动效
Juchecar9 小时前
解惑:NumPy 中 ndarray.ndim 到底是什么?
python
用户8356290780519 小时前
Python 删除 Excel 工作表中的空白行列
后端·python
Json_9 小时前
使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
后端·python·fastapi
数据智能老司机16 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机17 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机17 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机17 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i17 小时前
drf初步梳理
python·django
每日AI新事件17 小时前
python的异步函数
python