华为 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/目录必须加/,代表同步目录中的内容,而不是目录本身。