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的方法,这个是在官方文档中找到的,采用以下三个步骤: )

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:

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

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

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

vi ~/.bashrc

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

source ~/.bashrc

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

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

网址:

cuDNN Archive | NVIDIA Developer

选择一个版本:

解压

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

将解压后的文件夹重命名

mv cudnn-linux-x86_64-8.9.7.29_cuda12-archive cuda

移动文件:

sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp -P cuda/lib/libcudnn* /usr/local/cuda/lib64 

添加权限:

sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*

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

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也是一样的。

直接输入命令进行安装:

pip install jupyterlab

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

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

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

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

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

from jupyter_server.auth import passwd
passwd()

记录生成的密文

生成配置文件:

jupyter lab --generate-config

使用Vim编辑器打开该文件

vim /home/renjintao/.jupyter/jupyter_lab_config.py

/password =进行查找

按enter键定位到

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

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

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保存退出。

启动命令:

jupyter-lab

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

nohup jupyter lab --allow-root > jupyterlab.log 2>&1 &

本地打开浏览器

127.0.0.1:8888

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

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

创建配置文件

jupyter notebook --generate-config

用vim编辑器打开该文件:

vim /home/<用户名>/.jupyter/jupyter_notebook_config.py

先按下/

输入:c.NotebookApp.notebook_dir

enter

i

修改如下:

保存退出

:wq

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

先查看进程:

ps aux | grep jupyter

杀死进程:

kill -9 进程号

再次启动:

nohup jupyter lab --allow-root > jupyterlab.log 2>&1 &

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

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

开始部署

建立虚拟环境

建立Qwen的虚拟环境

conda create -n qwen python=3.11

切换到虚拟环境

conda activate qwen

克隆项目文件

git clone https://github.com/QwenLM/Qwen

安装依赖文件

cd Qwen
​
pip install -r requirements.txt

安装GPU版本pytorch

到网址:

Start Locally | PyTorch

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

12.x版本

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

11.x版本

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

非常快速的安装完成:

验证pytorch是否安装成功

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

import torch
print(torch.__version__)
print(torch.cuda.is_available())

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

配置jupyterlab

为虚拟环境建立kernel

conda install -n qwen ipykernel

将虚拟环境的kernel写入jupyterlab

python -m ipykernel install --user --name qwen --display-name qwen

再重启一下jupyterlab

下载模型

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

pip install modelscope

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

新建一个py文件:

写入以下代码:

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

右键运行,开始下载:

下载完成

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

方法2:采用jupyterlab

在右侧notebook中输入

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

点击运行

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

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

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

运行

下载成功。

启动大模型测试

命令行脚本

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

DEFAULT_CKPT_PATH = './model/qwen/Qwen-1_8B-Chat'
DEFAULT_CKPT_PATH = './model/qwen/Qwen-7B-Chat'

jupyterlab修改

启动模型试试:

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

或者在终端输入:

python cli_demo.py

启动成功:

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

再次运行:

python cli_demo.py

加载就慢很多了:

对话的反应也很慢:

测试网页demo

需要安装相应的依赖:

pip install -r requirements_web_demo.txt

再启动web-demo试试:

pycharm:

jupyterlab

注意我这里是7B模型

启动网页脚本:

python web_demo.py

启动成功。

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

显卡监控命令

nvidia-smi

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

watch -n 1 nvidia-smi

1.8模型下的显卡占用:

7B模型下的显卡占用:

flash-attention安装

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

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

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

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

安装方法如下:

先安装依赖包

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 该安装包名

pip install flash_attn-2.5.7+cu122torch2.3cxx11abiTRUE-cp311-cp311-linux_x86_64.whl

成功安装:

再回到之前的qwen文件夹:

克隆flash-attention项目文件

git clone https://github.com/Dao-AILab/flash-attention

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

cd到该文件夹:

cd flash-attention/csrc/layer_norm

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

MAX_JOBS=4 python setup.py install

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

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

正确安装的界面如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/639713.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++多生产者,多消费者模型

C11实现多生产者&#xff0c;多消费者模型 在C标准库中实现多生产者多消费者模型&#xff0c;可以使用std::thread、std::queue、互斥锁(std::mutex)、条件变量(std::condition_variable)等组件。下面是一个简单的示例&#xff0c;展示如何创建多生产者和多消费者模型&#xf…

Java进阶学习笔记1——课程介绍

课程适合学习的人员&#xff1a; 1&#xff09;具备一定java基础的人员&#xff1b; 2&#xff09;想深刻体会Java编程思想&#xff0c;成为大牛的人员&#xff1b; 学完有什么收获&#xff1f; 1&#xff09;掌握完整的Java基础技术体系&#xff1b; 2&#xff09;极强的编…

【学习笔记】Windows GDI绘图(五)图形路径GraphicsPath详解(上)

文章目录 图形路径GraphicsPath填充模式FillMode构造函数GraphicsPath()GraphicsPath(FillMode)GraphicsPath(Point[],Byte[])和GraphicsPath(PointF[], Byte[])GraphicsPath(Point[], Byte[], FillMode)和GraphicsPath(PointF[], Byte[], FillMode)PathPointType 属性FillMode…

DAMA:数据治理 CDGA/CDGP 认证考试备考经验分享

一、关于DAMA中国和CDGA/CDGP考试 国际数据管理协会&#xff08;DAMA国际&#xff09;是一个全球性的专业组织&#xff0c;由数据管理和相关的专业人士组成&#xff0c;非营利性机构&#xff0c;厂商中立。协会自1980年成立以来&#xff0c;一直致力于数据管理和数字化的研究、…

IJNM-International Journal of Network Management 智能网络管理

文章目录 一、期刊简介二、征稿信息三、期刊表现四、投稿须知五、投稿咨询 一、期刊简介 International Journal of Network Management 是一本网络管理领域的研究人员、开发人员和从业人员向国际观众展示其工作的论坛。该杂志致力于传播信息&#xff0c;这将改善计算机网络和…

leetcode-55 跳跃游戏

leetcode Problem: 55. 跳跃游戏 思路 假设我们是一个小人&#xff0c;从第一个下标开始&#xff0c;每次经过一个位置&#xff0c;我们就可以根据当前位置的数值nums[i]和位置下标i计算出该位置所能到达的后续位置的最大值rnums[i]i。而这个r之前的区域一定都是可以经过的。…

信息系统项目管理师0128:输出(8项目整合管理—8.6管理项目知识—8.6.3输出)

点击查看专栏目录 文章目录 8.6.3 输出 8.6.3 输出 经验教训登记册 经验教训登记册可以包含执行情况的类别和详细的描述&#xff0c;还可包括与执行情况相关的影响、建议和行动方案。经验教训登记册可以记录遇到的挑战、问题、意识到的风险和机会以及其他适用的内容。经验教训…

阴影映射(线段树)

实时阴影是电子游戏中最为重要的画面效果之一。在计算机图形学中&#xff0c;通常使用阴影映射方法来实现实时阴影。 游戏开发部正在开发一款 2D 游戏&#xff0c;同时希望能够在 2D 游戏中模仿 3D 游戏的光影效果&#xff0c;请帮帮游戏开发部&#xff01; 给定 x-y 平面上的…

如何在cPanel面板中开启盗链保护

本周有一个客户&#xff0c;购买Hostease的主机&#xff0c; 客户购买的是Linux虚拟主机&#xff0c;带cPanel面板的。询问我们的在线客服&#xff0c;如何可以防止他的网站上的图片不被盗用。cPanel的盗链保护功能可以帮助客户防止图片被盗链。 盗链&#xff08;Hotlinking&a…

11.【Orangepi Zero2】基于Linux的智能垃圾桶项目

基于Linux的垃圾分类项目 功能需求 语音接入控制垃圾分类识别&#xff0c;并触发垃圾桶的开关盖 回顾二阶段的Socket编程&#xff0c;实现Sockect发送指令远程控制垃圾分类识别&#xff0c;并触发垃圾桶的开关盖 图像识别垃圾分类功能 语音播报垃圾物品类型 OLED显示垃圾物…

五分钟”手撕“图书管理系统

前言&#xff1a; 图书馆管理系统需要结合JavaSE的绝大部分知识&#xff0c;是一个很好的训练项目。 为了让大家更加方便的查阅与学习&#xff0c;我把代码放开头&#xff0c;供大家查询。 还有对代码的分析&#xff0c;我将以类为单位分开讲解。 目录 全部代码 Main类 Us…

wordpress主题模板兔Modown 9.1开心版附送erphpdown v17.1插件

Modown 9.1开心版是一款模板兔开发的wordpress主题可&#xff0c;持续更新多年&#xff0c;优秀的资源下载类主题该模板基于Erphpdown&#xff0c;可以销售软件、视频教程、文章等等&#xff0c;通过主题和插件结合可以实现付费下载、付费阅读等功能&#xff0c;配合模板兔的一…

C++中获取int最大与最小值

不知道大家有没有遇到过这种要求&#xff1a;“返回值必须是int&#xff0c;如果整数数超过 32 位有符号整数范围 [−2^31, 2^31 − 1] &#xff0c;需要截断这个整数&#xff0c;使其保持在这个范围内。例如&#xff0c;小于 −2^31 的整数应该被固定为 −2^31 &#xff0c;大…

Pytest框架实战二

在Pytest框架实战一中详细地介绍了Pytest测试框架在参数化以及Fixture函数在API测试领域的实战案例以及具体的应用。本文章接着上个文章的内容继续阐述Pytest测试框架优秀的特性以及在自动化测试领域的实战。 conftest.py 在上一篇文章中阐述到Fixture函数的特性&#xff0c;第…

信息系统项目管理师0129:输入(8项目整合管理—8.7监控项目工作—8.7.1输入)

点击查看专栏目录 文章目录 8.7 监控项目工作8.7.1 输入8.7 监控项目工作 监控项目工作是跟踪、审查和报告整体项目进展,以实现项目管理计划中确定的绩效目标的过程。本过程的主要作用: 让干系人了解项目的当前状态并认可为处理绩效问题而采取的行动;通过成本和进度预测,让…

VTK9.2.0+QT5.14.0绘制三维显示背景

背景 上一篇绘制点云的博文中&#xff0c;使用的vtkCameraOrientationWidget来绘制的坐标轴&#xff0c;最近又学习到两种新的坐标轴绘制形式。 vtkOrientationMarkerWidget vtkAxesActor 单独使用vtkAxesActor能够绘制出坐标轴&#xff0c;但是会随着鼠标操作旋转和平移时…

弱监督语义分割-对CAM的生成过程进行改进3

三、擦除图像高响应部分以获取更多的分割领域 ECS-Net: Improving Weakly Supervised Semantic Segmentation by Using Connections Between Class Activation Maps&#xff08;ICCV,2021&#xff09; 1.引言 我们首先从图像中擦除高响应区域&#xff0c;并生成这些擦除图像…

Java进阶学习笔记2——static

static&#xff1a; 叫静态&#xff0c;可以修饰成员变量、成员方法。 成员变量按照有无static修饰&#xff0c;分为两种&#xff1a; 类变量&#xff1a;有static修饰&#xff0c;属于类&#xff0c;在计算机中只有一份&#xff0c;会被类的全部对象共享。静态成员变量。 实…

[Algorithm][动态规划][路径问题][下降路径最小和][最小路径和][地下城游戏]详细讲解

目录 1.下降路径最小和1.题目链接2.算法原理详解3.代码实现 2.最小路径和1.题目链接2.算法原理详解3.代码实现 3.地下城游戏1.题目链接2.算法原理详解3.代码实现 1.下降路径最小和 1.题目链接 下降路径最小和 2.算法原理详解 思路&#xff1a; 确定状态表示 -> dp[i][j]的…

CAN总线的终端电阻为什么要分布在两端?

CAN总线的终端节点需要分布在两端&#xff0c;主要是为了防止信号反射。 在任何传输线路中&#xff0c;当信号传输到线路的末端时&#xff0c;如果末端没有被正确匹配&#xff0c;就会产生反射信号。这个反射信号会沿着原来的路线返回&#xff0c;与原来的信号叠加&#xff0c;…