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 --shutdownwsl -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.pinsudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600wget 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.debsudo dpkg -i cuda-repo-ubuntu2204-12-2-local_12.2.0-535.54.03-1_amd64.debsudo cp /var/cuda-repo-ubuntu2204-12-2-local/cuda-*-keyring.gpg /usr/share/keyrings/sudo apt-get updatesudo 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 = TrueServerApp.ip = '0.0.0.0'ServerApp.open_browser = FalseServerApp.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!!!

正确安装的界面如下:

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据可视化第9天(利用wordcloud和jieba分析蝙蝠侠评论的关键字)

数据可以在这里下载 https://github.com/harkbox/DataAnalyseStudy WordCloud wordcloud可以很方便的生成词云图&#xff0c;方便的提供可视化可以直接使用pip install wordcloud进行安装如果使用的是Anaconda,可以使用conda install进行安装 下面看一个简单的例子 txt &qu…

JVM学习-堆空间(三)

JVM在进行GC时&#xff0c;并非每次都对新生代、老年代、方法区(元空间)三个区域一起回收&#xff0c;大部分时间回收的都是新生代 针对Hotspot VM的实现&#xff0c;它里面的GC按照回收区域分两大类型&#xff1a;一种是部分收集(Partial GC)&#xff0c;一种是整堆收集(Full …

amtlib.dll打不开怎么办?一键修复丢失amtlib.dll方法

电脑丢失amtlib.dll文件是什么情况&#xff1f;出现amtlib.dll打不开怎么办&#xff1f;这样的情况有什么解决方法呢&#xff1f;今天就和大家聊聊amtlib.dll文件同时教大家一键修复丢失amtlib.dll方法&#xff1f;一起来看看amtlib.dll文件丢失会有哪些方法修复&#xff1f; a…

Docker配置国内镜像源

添加Docker国内镜像源 在/etc/docker/daemon.json文件中添加以下内容&#xff1a; {"registry-mirrors": ["http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn","https://registry.docker-cn.com"] }重启docker s…

【Python】—— lambda表达式

目录 &#xff08;一&#xff09;应用场景 &#xff08;二&#xff09;lambda 语法 &#xff08;三&#xff09;示例分析 &#xff08;四&#xff09;lambda参数形式 4.1 无参数 4.2 一个参数 4.3 默认参数 4.4 可变参数 &#xff1a;*args 4.5 可变参数 &#xff1a;…

第四十一天 | 62.不同路径 63.不同路径|| 343.整数拆分 96.不同的二叉搜索树

题目&#xff1a;62.不同路径 1.二维dp数组dp[i][j]含义&#xff1a;到达&#xff08;i&#xff0c;j&#xff09;位置有dp[i][j]种方法。 2.动态转移方程&#xff1a;dp[i][j] dp[i - 1][j] dp[i][j - 1] 3.初始化&#xff1a;dp[0][j] 1, dp[i][0] 1 &#xff08;第一…

Spring Cloud 之 Gateway

本篇主要介绍有关Gateway网关的相关内容。 目录 一、什么是网关 二、Gateway的使用 Gateway服务的搭建 Route Predicate Factories Gateway Filter Factories Filter GlobalFilter Filter的执行顺序 一、什么是网关 经常面试的人肯定知道&#xff0c;在去公司面试时…

CAN笔记第二篇,车载测试继续学起来!

在CAN协议中&#xff0c;“帧”是一个包含完整信息的独立单元&#xff0c;它具有特定的格式和结构&#xff0c;以确保数据在CAN总线上的可靠传输。这里的“帧”字可以理解为&#xff1a; 完整性&#xff1a;一个帧包含了所有必要的信息&#xff0c;从起始到结束&#xff0c;都遵…

【LeetCode】【1】两数之和(1141字)

文章目录 [toc]题目描述样例输入输出与解释样例1样例2样例3 提示进阶Python实现哈希表 个人主页&#xff1a;丷从心 系列专栏&#xff1a;LeetCode 刷题指南&#xff1a;LeetCode刷题指南 题目描述 给定一个整数数组nums和一个整数目标值target&#xff0c;请在该数组中找出…

视觉检测实战项目——九点标定

本文介绍九点标定方法 已知 9 个点的图像坐标和对应的机械坐标,直接计算转换矩阵,核心原理即最小二乘拟合 {𝑥′=𝑎𝑥+𝑏𝑦+𝑐𝑦′=𝑎′𝑥+𝑏′𝑦+𝑐′ [𝑥1𝑦11𝑥2𝑦21⋮⋮⋮𝑥9𝑦91][𝑎𝑎′𝑏𝑏′𝑐𝑐′]=[𝑥1′𝑦…

AI爆文写作:根据别人的爆款标题,如何通过名词替换改成自己的爆款标题?

在日常刷到爆文的时候&#xff0c;就可以培养自己的网感&#xff0c;为啥这篇文章会爆&#xff1f; 这篇爆文的标题有啥诀窍呢&#xff1f; 比如下面这一篇&#xff1a;《极简生活&#xff1a;变富就是每天循环5个动作》 我们可以发现&#xff0c;每天循环5个动作 这几个词语…

C#基础一

使用Visual Studio 2022&#xff08;VS2022&#xff09;编写C#控制台程序 1. 安装Visual Studio 2022 确保已安装Visual Studio 2022。如果未安装&#xff0c;请从Visual Studio官网下载并安装。 另一篇文章中已经有详细描述&#xff0c;这里就不在细说了。 VisualStudio2022…

【JavaEE 初阶(十)】JVM

❣博主主页: 33的博客❣ ▶️文章专栏分类:JavaEE◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你了解更多进阶知识 目录 1.前言2.JVM内存区域划分3.类加载3.1双亲委派模型 4.垃圾回收&#xff08;GC&#xff0…

1098: 堆的判断

解法&#xff1a; 堆是完全二叉树 用数组来存储 然后用定义判定 #include<iostream> #include<vector> using namespace std; int main() {int n;cin >> n;vector<int> vec(n);for (int i 0; i < n; i) cin >> vec[i];for (int i 0; i &…

LabVIEW超高温高压流变仪测试系统

LabVIEW超高温高压流变仪测试系统 超高温高压流变仪广泛应用于石油、天然气、化工等行业&#xff0c;用于测量材料在极端条件下的流变特性。随着计算机技术、测试技术和电子仪器技术的快速发展&#xff0c;传统的流变仪测试方式已无法满足现代工业的需求。因此&#xff0c;开发…

【全开源】沃德商协会管理系统源码(FastAdmin+ThinkPHP+Uniapp)

一款基于FastAdminThinkPHPUniapp开发的商协会系统&#xff0c;新一代数字化商协会运营管理系统&#xff0c;以“智慧化会员体系、智敏化内容运营、智能化活动构建”三大板块为基点&#xff0c;实施功能全场景覆盖&#xff0c;一站式解决商协会需求壁垒&#xff0c;有效快速建立…

就业班 第三阶段(CICD) 2401--5.15 day2 自动化构建打包、部署(Jenkins + maven+ gitlab+tomcat)

一、平滑发布与灰度发布 **什么叫平滑&#xff1a;**在发布的过程中不影响用户的使用&#xff0c;系统不会因发布而暂停对外服务&#xff0c;不会造成用户短暂性无法访问&#xff1b; **什么叫灰度&#xff1a;**发布后让部分用户使用新版本&#xff0c;其它用户使用旧版本&am…

vector的底层实现与模拟

嗨喽大家好&#xff0c;时隔许久阿鑫又给大家带来了新的博客&#xff0c;关于vector的模拟实现&#xff0c;下面让我们开始今天的学习吧&#xff01; vector的底层实现与模拟 1.关于vector中的插入和删除 2. vector中的拷贝构造和赋值 3.vector的构造函数 4.关于vector中浅…

微信小程序报错:notifyBLECharacteristicValueChange:fail:nodescriptor的解决办法

文章目录 一、发现问题二、分析问题二、解决问题 一、发现问题 微信小程序报错&#xff1a;notifyBLECharacteristicValueChange:fail:nodescriptor 二、分析问题 这个提示有点问题&#xff0c;应该是该Characteristic的Descriptor有问题&#xff0c;而不能说nodescriptor。 …

windows docker desktop 更换镜像存储目录

windows docker desktop 更换镜像存储目录 方法&#xff1a;如图&#xff0c;Browse浏览一个新的目录并选中&#xff0c;确定后&#xff0c;程序会开始stop&#xff0c;在stop完成前&#xff0c;会持续迁移原有镜像到新的位置&#xff0c;你会发现目标位置的磁盘占用空间越来越…