华为 Atlas 800I A2 大模型部署实战(二):逻辑卷创建与大模型下载
本指南详细阐述了如何使用 LVM(逻辑卷管理)来创建和管理磁盘分区,包括物理卷、卷组和逻辑卷的设置。文档还提供了关于 ext4 和 XFS 文件系统的对比,并指导用户如何挂载文件系统以及实现开机自动挂载。最后,它解释了如何使用 ModelScope 和 openmind_hub 工具来下载各种大型模型,并利用 rsync 命令在服务器之间同步文件。
服务器配置
AI 服务器:华为 Atlas 800I A2 推理服务器
组件 | 规格 |
---|---|
CPU | 鲲鹏 920(5250) |
NPU | 昇腾 910B4(8X32G) |
内存 | 1024GB |
硬盘 | 系统盘:450GB SSDX2 RAID1 数据盘:3.5TB NVME SSDX4 |
操作系统 | openEuler 22.03 LTS |
逻辑卷创建
LVM(逻辑卷管理)
LVM (Logical Volume Manager,逻辑卷管理) 是 Linux 环境下对磁盘分区进行管理的一种机制,它提供了比传统分区更灵活和强大的磁盘管理功能。
LVM 主要由以下几个核心概念组成:
- 物理卷 (Physical Volume, PV):实际的物理磁盘或分区
- 卷组 (Volume Group, VG):由一个或多个物理卷组成的存储池
- 逻辑卷 (Logical Volume, LV):从卷组中划分出的逻辑存储单元,可格式化并挂载使用
LVM 的优势
- 灵活的容量管理:可以动态调整逻辑卷大小
- 存储池化:多个物理设备可以组合成一个大的存储池
- 在线扩容:无需卸载文件系统即可调整大小
- 快照功能:可以创建逻辑卷的快照用于备份
- 条带化:提高性能
- 镜像:提高数据可靠性
查看磁盘信息
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 446.1G 0 disk
├─sda1 8:1 0 600M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 444.5G 0 part
├─openeuler-root 253:0 0 70G 0 lvm /
├─openeuler-swap 253:1 0 4G 0 lvm [SWAP]
└─openeuler-home 253:2 0 370.5G 0 lvm /home
nvme1n1 259:0 0 3.5T 0 disk
nvme0n1 259:1 0 3.5T 0 disk
nvme2n1 259:2 0 3.5T 0 disk
nvme3n1 259:3 0 3.5T 0 disk
创建物理卷(PV)
for d in /dev/nvme{0..3}n1; do
pvcreate "$d"
done
Physical volume "/dev/nvme0n1" successfully created.
Physical volume "/dev/nvme1n1" successfully created.
Physical volume "/dev/nvme2n1" successfully created.
Physical volume "/dev/nvme3n1" successfully created.
- 查看物理卷信息
pvs
PV VG Fmt Attr PSize PFree
/dev/nvme0n1 lvm2 --- 3.49t 3.49t
/dev/nvme1n1 lvm2 --- 3.49t 3.49t
/dev/nvme2n1 lvm2 --- 3.49t 3.49t
/dev/nvme3n1 lvm2 --- 3.49t 3.49t
/dev/sda3 openeuler lvm2 a-- <444.54g 0
创建卷组(VG)
vgcreate vg_data /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1
Volume group "vg_data" successfully created
- 查看卷组信息
vgs
VG #PV #LV #SN Attr VSize VFree
openeuler 1 3 0 wz--n- <444.54g 0
vg_data 4 0 0 wz--n- 13.97t 13.97t
创建逻辑卷(LV)
lvcreate -l 100%VG -n lv_data vg_data
Logical volume "lv_data" created.
- 查看逻辑卷信息
lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home openeuler -wi-ao---- <370.54g
root openeuler -wi-ao---- 70.00g
swap openeuler -wi-ao---- 4.00g
lv_data vg_data -wi-a----- 13.97t
格式化
mkfs.xfs /dev/vg_data/lv_data
meta-data=/dev/vg_data/lv_data isize=512 agcount=14, agsize=268435455 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=0 inobtcount=0
data = bsize=4096 blocks=3750735872, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=521728, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
Discarding blocks...Done.
如需 ext4:mkfs.ext4 /dev/vg_data/lv_data
以下是 ext4 和 XFS 文件系统的对比表格整理:
对比项 | ext4 | XFS |
---|---|---|
设计背景 | ext 家族第四代,通用场景设计 | 为高性能、大容量存储设计(如视频、数据库) |
最大文件大小 | 16 TiB(理论 1 EiB) | 8 EiB |
最大卷大小 | 1 EiB | 8 EiB |
目录文件数限制 | 默认约 6.4 万(可通过调整增大) | 近乎无限 |
小文件性能 | 更优(适合频繁创建/删除小文件) | 较差 |
大文件性能 | 一般 | 显著更优(连续读写性能强) |
高并发 I/O | 一般 | 优化更好(多线程、多核 CPU 支持佳) |
日志功能 | 支持三种模式:journal /ordered /writeback |
始终启用高效元数据日志 |
碎片管理 | 需离线整理(e4defrag ) |
支持在线整理(xfs_fsr ) |
扩展性 | 支持在线扩展,但不支持缩小(速度较慢) | 支持在线扩展(速度快),不支持缩小 |
fsck 修复时间 | 较长(尤其大容量分区) | 通常无需修复(日志恢复快) |
适用场景 | 桌面系统、传统服务器、邮件存储等小文件密集型场景 | 大文件、高吞吐场景(如数据库、虚拟化、云存储) |
格式化命令 | mkfs.ext4 -L mydata /dev/sdX1 |
mkfs.xfs -L mydata /dev/sdX1 |
保留空间 | 默认 5% 保留给 root(可通过 -m 0 取消) |
无固定保留空间 |
兼容性 | 广泛支持(旧版 Linux、嵌入式系统等) | 需较新内核(主流现代发行版均支持) |
快照支持 | 依赖 LVM 或 btrfs | 原生支持(配合 LVM 更佳) |
关键选择建议
- 选 ext4:常规用途、小文件操作多、兼容性要求高。
- 选 XFS:处理大文件(如虚拟机镜像)、需要高吞吐或并发 I/O(如数据库)。
临时挂载
mkdir -p /data
mount /dev/vg_data/lv_data /data
📌 开机自动挂载
- 查看 UUID
blkid /dev/vg_data/lv_data
/dev/vg_data/lv_data: UUID="eee7da5b-7d61-4a57-8b4d-b409da39d551" BLOCK_SIZE="512" TYPE="xfs"
- 编辑
/etc/fstab
文件,添加如下内容
UUID=eee7da5b-7d61-4a57-8b4d-b409da39d551 /data xfs defaults 0 0
或者直接使用设备路径
/dev/mapper/vg_data-lv_data /data xfs defaults 0 0
- 验证挂载
mount -a # 无报错即成功
创建软链接
mkdir -p /data/models
ln -s /data/models /models
大模型下载
模型目录结构
/models
├── BAAI
│ └── bge-large-zh-v1.5
├── deepseek-ai
│ ├── DeepSeek-R1-Distill-Qwen-7B
│ ├── DeepSeek-R1-Distill-Qwen-7B-w8a8
│ ├── DeepSeek-R1-Distill-Qwen-14B
│ └── DeepSeek-R1-Distill-Qwen-32B
└── Qwen
├── Qwen2.5-14B-Instruct
├── Qwen2.5-32B-Instruct
├── Qwen2.5-72B-Instruct
├── Qwen2.5-7B-Instruct
├── Qwen2.5-Coder-7B-Instruct
└── Qwen2.5-VL-7B-Instruct
魔搭(ModelScope)下载工具
在下载前,请先通过如下命令安装 ModelScope
pip install modelscope
# 📌 禁用 torch_npu 自动加载
export TORCH_DEVICE_BACKEND_AUTOLOAD=0
modelscope download --model <模型名称> --local_dir <本地目录>
--model
参数指定要下载的模型名称--local_dir
参数指定下载到本地的目录。
默认存储
- Linux/macOS: ~/.cache/modelscope/hub
- Windows: C:\Users<用户名>.cache\modelscope\hub
modelscope download --model Qwen/Qwen2.5-7B-Instruct --local_dir Qwen2.5-7B-Instruct
魔乐(openmind)下载工具
安装 openMind Hub Client 工具
pip install openmind-hub
编写下载模型工具,文件:openmind.py
import os
import argparse
# 魔乐访问令牌
MODELERS_TOKEN = "您的令牌"
# 设置环境变量
os.environ["HUB_WHITE_LIST_PATHS"] = "/models"
# 📌 必须在设置环境变量语句👆的下面
from openmind_hub import snapshot_download
def download_model(repo_id, local_dir=None):
"""
下载模型的工具函数。
参数:
- repo_id (str): 模型的仓库ID。
- local_dir (str, 可选): 模型保存的本地目录。如果未提供,则使用默认目录,并设置 local_dir_use_symlinks 为 "auto"。
"""
# 设置默认的本地目录和链接行为
if local_dir is None:
local_dir_use_symlinks = "auto"
else:
local_dir_use_symlinks = "false"
# 下载模型
snapshot_download(
repo_id=repo_id,
token=MODELERS_TOKEN,
repo_type="model",
local_dir=local_dir,
local_dir_use_symlinks=local_dir_use_symlinks
)
print(f"模型 {repo_id} 已成功下载")
def main():
# 创建命令行参数解析器
parser = argparse.ArgumentParser(
description="""
openmind_hub 模型下载工具
模型来自:魔乐社区(https://modelers.cn/)
使用前需要配置变量:
- HUB_WHITE_LIST_PATHS:下载到本地的目录,可以是父目录,默认为:/models
- MODELERS_TOKEN:到魔乐社区申请您的 Token
使用示例:
- 下载模型到默认目录:
python openmind.py Jinan_AICC/DeepSeek-R1-Distill-Qwen-7B-w8a8
- 下载模型到指定目录:
python openmind.py Jinan_AICC/DeepSeek-R1-Distill-Qwen-7B-w8a8 --local_dir DeepSeek-R1-Distill-Qwen-7B-w8a8
""",
formatter_class=argparse.RawTextHelpFormatter # 保留原始格式
)
parser.add_argument("repo_id", type=str, help="模型的仓库ID")
parser.add_argument("--local_dir", type=str, default=None, help="模型保存的本地目录(可选)")
# 解析命令行参数
args = parser.parse_args()
# 调用下载函数
download_model(args.repo_id, args.local_dir)
if __name__ == "__main__":
main()
openmind 的使用方法
usage: openmind.py [-h] [--local_dir LOCAL_DIR] repo_id
openmind_hub 模型下载工具
模型来自:魔乐社区(https://modelers.cn/)
使用前需要配置变量:
- HUB_WHITE_LIST_PATHS:下载到本地的目录,可以是父目录,默认为:/models
- MODELERS_TOKEN:到魔乐社区申请您的 Token
使用示例:
- 下载模型到默认目录(~/.cache/openmind):
python openmind.py Jinan_AICC/DeepSeek-R1-Distill-Qwen-7B-w8a8
- 下载模型到指定目录:
python openmind.py Jinan_AICC/DeepSeek-R1-Distill-Qwen-7B-w8a8 --local_dir DeepSeek-R1-Distill-Qwen-7B-w8a8
positional arguments:
repo_id 模型的仓库ID
optional arguments:
-h, --help show this help message and exit
--local_dir LOCAL_DIR
模型保存的本地目录(可选)
到 魔乐模型库 查找您想下载的模型。
下载模型 Jinan_AICC/DeepSeek-R1-Distill-Qwen-7B-w8a8
python3 openmind.py Jinan_AICC/DeepSeek-R1-Distill-Qwen-7B-w8a8 \
--local_dir /models/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B-w8a8
大语言模型
Qwen2.5
modelscope download --model Qwen/Qwen2.5-7B-Instruct --local_dir Qwen2.5-7B-Instruct
modelscope download --model Qwen/Qwen2.5-14B-Instruct --local_dir Qwen2.5-14B-Instruct
modelscope download --model Qwen/Qwen2.5-32B-Instruct --local_dir Qwen2.5-32B-Instruct
modelscope download --model Qwen/Qwen2.5-72B-Instruct --local_dir Qwen2.5-72B-Instruct
DeepSeek-R1
modelscope download --model deepseek-ai/DeepSeek-R1-Distill-Qwen-7B --local_dir DeepSeek-R1-Distill-Qwen-7B
modelscope download --model deepseek-ai/DeepSeek-R1-Distill-Qwen-14B --local_dir DeepSeek-R1-Distill-Qwen-14B
modelscope download --model deepseek-ai/DeepSeek-R1-Distill-Qwen-32B --local_dir DeepSeek-R1-Distill-Qwen-32B
嵌入模型
modelscope download --model BAAI/bge-large-zh-v1.5 --local_dir bge-large-zh-v1.5
多模态大模型
modelscope download --model Qwen/Qwen2.5-VL-3B-Instruct --local_dir Qwen2.5-VL-3B-Instruct
modelscope download --model Qwen/Qwen2.5-VL-7B-Instruct --local_dir Qwen2.5-VL-7B-Instruct
文件同步(服务器)
rsync
是一个非常强大且常用的文件同步工具,广泛用于备份、镜像和文件传输等场景。它支持本地和远程同步,并且可以通过多种方式优化同步过程,例如增量同步(只同步有变化的部分)、压缩传输、保留文件权限等。
NPU 软件(驱动、固件、MCU、MindIE)
rsync -avz -e "ssh -p 10022" /data/wjj/ root@172.16.33.107:/data/wjj
📌
/data/wjj/
目录必须加/
,代表同步目录中的内容,而不是目录本身。
-e "ssh -p 10022"
:-e
参数用于指定远程 shell 命令(这里是 SSH),并附加-p 10022
来指定 SSH 的端口号。-a
:归档模式,表示递归同步并保留文件权限、时间戳等。-v
:详细模式,显示同步过程中的详细信息。-z
:在传输过程中压缩文件数据,提高传输效率。--delete
:删除目标目录中多余的文件,使目标目录与源目录保持一致。
大模型
rsync -avz -e "ssh -p 10022" /data/models/ root@172.16.33.107:/data/models
/data/models/
目录必须加/
,代表同步目录中的内容,而不是目录本身。