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

news2024/11/22 9:34:25

前言

这段时间在自己的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!!!

正确安装的界面如下:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

leetcode-55 跳跃游戏

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

Point-to-Voxel Knowledge Distillation for LiDAR Semantic Segmentation论文阅读

1. 代码地址 GitHub - cardwing/Codes-for-PVKD: Point-to-Voxel Knowledge Distillation for LiDAR Semantic Segmentation (CVPR 2022) 2. 动机 本篇文章旨在将点云语义分割的复杂模型中的知识蒸馏到较轻量级的模型中。具体的实现方式为将原有的3D backbone网络的每一层进…

恶劣天候激光雷达点云模拟方法论文整理

恶劣天候点云模拟方法论文整理 模拟雨天点云&#xff1a;【AAAI2024】模拟雪天点云&#xff1a;【CVPR 2022 oral】模拟雾天点云&#xff1a;【ICCV2021】模拟点云恶劣天候的散射现象&#xff1a;【Arxiv 2021】模拟积水地面的水花飞溅点云&#xff1a;【RAL2022】 模拟雨天点云…

蓝桥杯Web开发【大赛大纲】15届

一、 组别 Web应用开发分为&#xff1a;大学组和职业院校组。 每位选手只能申请参加其中一个组别的竞赛。各个组别单独评奖。 研究生和本科生只能报大学组。 其它高职高专院校可自行选择报任意组别。 二. 竞赛赛程 省赛时长&#xff1a;4小时。 决赛时长&#xff1a;4小…

纹理映射技术在AI去衣中的艺术与科技融合

引言&#xff1a; 在数字图像处理的世界里&#xff0c;AI去衣技术正逐步揭开其神秘的面纱。这门技术结合了深度学习的智能算法与图形学的先进手段&#xff0c;以实现对图像中衣物的智能识别与处理。在这一过程中&#xff0c;纹理映射技术发挥着至关重要的作用。本篇博客将深入探…

【GESP试卷】2024年03月Scratch四级试卷

2024年GESP03月认证Scratch四级试卷 分数&#xff1a;100 题数&#xff1a;27 一、单选题(共15题&#xff0c;每题2分&#xff0c;共30分) 010203040506070809101112131415CDBBACBCDCDADBA 1、小杨的父母最近刚刚给他买了一块华为手表&#xff0c;他说手表上跑的是鸿蒙&…

【综合类型第 39 篇】《我的创作纪念日》成为创作者的第2048天

这是【综合类型第 39 篇】&#xff0c;如果觉得有用的话&#xff0c;欢迎关注专栏。 前言 无意间看了一眼CSDN的私信&#xff0c;提示我 Allen Su &#xff0c;不知不觉今天已经是你成为创作者的 第2048天 啦&#xff0c;为了纪念这一天&#xff0c;我们为您准备了一份专属小…

vue3 响应式基础(怎么改变界面值)

在开发中&#xff0c;我们需要在改变一个数据的同时&#xff0c;去改变页面的变化&#xff0c;那这个时候响应式声明用起来就比较方便 之前做安卓开发的时候&#xff0c;要改变页面&#xff0c;首先拿到页面的一个控件&#xff0c;再对控件进行赋值或者其他的操作来改变界面 1、…

孢子捕捉分析仪的工作原理

TH-BZ1孢子捕捉分析仪是一种专门用于捕捉和分析空气中飘浮的病原菌孢子的设备。它利用现代传感技术、图像识别技术和网络通信技术&#xff0c;通过设置在田间的设备&#xff0c;连续不断地抽吸周围空气&#xff0c;吸附空气中漂浮的病原菌孢子到特制的载玻带上。然后&#xff0…

基于Kafka的日志采集

目录 前言 架构图 资源列表 基础环境 关闭防护墙 关闭内核安全机制 修改主机名 添加hosts映射 一、部署elasticsearch 修改limit限制 部署elasticsearch 修改配置文件 启动 二、部署filebeat 部署filebeat 添加配置文件 启动 三、部署kibana 部署kibana 修…

Vitis HLS 学习笔记--抽象并行编程模型-不良示例

目录 1. 简介 2. 基础 kernel 2.1 pass kernel 2.2 double_pass kernel 2.3 add_kernel 2.4 split kernel 3. 三种bypass 3.1 input_bypass 3.2 middle_bypass 3.3 output_bypass 4. 总结 1. 简介 本文展示三个在数据流水线中常见的问题&#xff1a; 输入参数绕过…

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

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

计算机毕业设计hadoop+spark微博舆情大数据分析 微博爬虫可视化 微博数据分析 微博采集分析平台 机器学习(大屏+LSTM情感分析+爬虫)

电商数据建模 一、分析背景与目的 1.1 背景介绍 电商平台数据分析是最为典型的一个数据分析赛道&#xff0c;且电商数据分析有着比较成熟的数据分析模型&#xff0c;比如&#xff1a;人货场模型。此文中我将通过分析国内最大的电商平台——淘宝的用户行为&#xff0c;来巩固数…

WebRTC | 网络传输协议 RTP 和 RTCP

WebRTC | 网络传输协议 RTP 和 RTCP WebRTC | 网络传输协议 RTP 和 RTCP如何选择 TCP 与 UDPRTP概述工作机制报文结构RTP 的使用RTP 拓展头RTP 中的填充数据翻译器和混合器同步控制报文大小wireshark 抓取 RTP 报文 RTCP概述工作机制分组类型报文结构WebRTC 的反馈报文RTPFBPSF…

接口响应断言

目录 接口断言介绍接口断言方式介绍响应状态码断言 课程目标 掌握什么是接口断言。了解接口断言的多种方式。掌握如何对响应状态码完成断言。 思考 这两段代码是完整的接口自动化测试代码吗&#xff1f; …省略… when().get(“https://httpbin.ceshiren.com/get?namead&…

白鹭群优化算法,原理详解,MATLAB代码免费获取

白鹭群优化算法&#xff08;Egret Swarm Optimization Algorithm&#xff0c;ESOA&#xff09;是一种受自然启发的群智能优化算法。该算法从白鹭和白鹭的捕食行为出发&#xff0c;由三个主要部分组成:坐等策略、主动策略和判别条件。将ESOA算法与粒子群算法(PSO)、遗传算法(GA)…

5.24学习记录

[FSCTF 2023]ez_php2 比较简单的pop链 <?php highlight_file(__file__); Class Rd{public $ending;public $cl;public $poc;public function __destruct(){echo "All matters have concluded";die($this->ending);}public function __call($name, $arg){for…

揭秘Python的魔法:装饰器的超能力大揭秘 ‍♂️✨

文章目录 Python进阶之装饰器详解1. 引言装饰器的概念与意义装饰器在Python编程中的作用 2. 背景介绍2.1 函数作为对象2.2 高阶函数 3. 装饰器基础3.1 理解装饰器3.2 装饰器的工作原理 4. 带参数的装饰器4.1 为什么需要带参数4.2 实现带参数的装饰器使用函数包裹装饰器使用类实…

【ZYNQ】AXI-Quad-SPI SDK 开发记录 测试

前人工作 如前人工作&#xff0c;在Navigate to BSP Settings中找到历例程 file:///F:/Xilinx/Vitis/2019.2/data/embeddedsw/XilinxProcessorIPLib/drivers/spi_v4_5/doc/html/api/example.html使用XSpi_LowLevelExample例子&#xff0c;源代码的AI解析 int XSpi_LowLeve…

蓝桥杯Web开发【模拟题一】15届

1.动态的Tab栏 日常在使用移动端 APP 或访问 PC 端网站的时候&#xff0c;常常发现在一些有工具栏或者 Tab 栏的页面会有顶栏固定的效果。简单来说&#xff0c;在页面未开始滚动时顶栏处在其原有的位置上&#xff0c;当页面向下滚动一定区域后&#xff0c;顶栏会跟随滚动固定在…