Skip to main content

lssd-mounter

This skill should be used when users need to detect, format, and mount Google Cloud Local SSDs (NVMe) as a RAID0 array on /lssd. It covers SSD detection, RAID0 creation with mdadm, filesystem formatting, mounting, and HuggingFace cache directory setup. The skill is particularly useful for high-speed storage for ML model caching, checkpoints, and temporary data on Google Cloud VMs.

Aller à l'installation

Informations de source

Dépôt
yangwhale/gpu-tpu-pedia
Dernière activité de la source
9 février 2026 à 09:12
Langue détectée de SKILL.md
chinois
Étoiles
14
Forks
3

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Explorateur de fichiers
3 fichiers

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
lssd-mounter
description
This skill should be used when users need to detect, format, and mount Google Cloud Local SSDs (NVMe) as a RAID0 array on /lssd. It covers SSD detection, RAID0 creation with mdadm, filesystem formatting, mounting, and HuggingFace cache directory setup. The skill is particularly useful for high-speed storage for ML model caching, checkpoints, and temporary data on Google Cloud VMs.
license
MIT
# LSSD Mounter ## Overview LSSD Mounter 帮助用户在 Google Cloud VM 上检测、格式化并挂载本地 NVMe SSD 为 RAID0 阵列。挂载到 `/lssd` 后,可用于 HuggingFace 模型缓存、检查点存储和临时数据的高速存储。 Google Cloud 的 Local SSD 提供极高的 IOPS 和带宽(每块 SSD 高达 680MB/s 读取、360MB/s 写入),通过 RAID0 组合可获得数 GB/s 的吞吐量。 ## When to Use This Skill - 在 Google Cloud VM 上首次设置 Local SSD 存储 - 检查 Local SSD 挂载状态和可用空间 - 为 HuggingFace 模型下载配置高速缓存目录 - 诊断 Local SSD 相关问题 ## Prerequisites - Google Cloud VM with Local SSD attached - sudo privileges - mdadm package (usually pre-installed) ## Quick Start ### 检查 LSSD 状态 ```bash ./scripts/check-lssd.sh ``` ### 挂载 LSSD ```bash sudo ./scripts/mount-lssd.sh ``` ## Detection and Mounting Workflow ### Step 1: 检测已挂载状态 首先检查 `/lssd` 是否已挂载: ```bash if mountpoint -q /lssd 2>/dev/null; then echo "LSSD 已挂载: $(df -h /lssd | tail -1 | awk '{print $2}')" fi ``` ### Step 2: 检测可用 NVMe SSD 如果未挂载,检测可用的 NVMe SSD: ```bash # 检测 NVMe SSD 数量 NVME_COUNT=$(ls /dev/disk/by-id/ 2>/dev/null | grep -c "google-local-nvme-ssd" || echo 0) echo "检测到 ${NVME_COUNT} 块 NVMe SSD" # 列出所有 SSD ls /dev/disk/by-id/google-local-nvme-ssd-* ``` 常见配置: - 1 块 SSD: 375 GB - 4 块 SSD: 1.5 TB - 8 块 SSD: 3 TB - 16 块 SSD: 6 TB - 24 块 SSD: 9 TB - 32 块 SSD: 12 TB (a3-megagpu-8g, a3-highgpu-8g) ### Step 3: 创建 RAID0 阵列 使用 mdadm 创建 RAID0 阵列: ```bash # 获取所有 NVMe SSD 设备 NVME_DEVICES=$(ls /dev/disk/by-id/google-local-nvme-ssd-* 2>/dev/null | sort) NVME_COUNT=$(echo "$NVME_DEVICES" | wc -l) # 检查 md0 是否已存在 if [ -e /dev/md0 ]; then echo "RAID 设备 /dev/md0 已存在" else # 创建 RAID0 阵列 sudo mdadm --create /dev/md0 --level=0 --raid-devices=$NVME_COUNT $NVME_DEVICES fi ``` ### Step 4: 格式化和挂载 ```bash # 格式化 (仅在新创建时) sudo mkfs.ext4 -F /dev/md0 # 创建挂载点并挂载 sudo mkdir -p /lssd sudo mount /dev/md0 /lssd # 设置权限 sudo chmod a+w /lssd ``` ### Step 5: 配置 HuggingFace 缓存 ```bash # 创建 HuggingFace 缓存目录 sudo mkdir -p /lssd/huggingface sudo chmod a+w /lssd/huggingface # 设置环境变量 export HF_HOME=/lssd/huggingface # 持久化到 bashrc if ! grep -q 'export HF_HOME=/lssd/huggingface' ~/.bashrc; then echo '' >> ~/.bashrc echo '# HuggingFace cache on LSSD (high-speed local SSD)' >> ~/.bashrc echo 'export HF_HOME=/lssd/huggingface' >> ~/.bashrc fi ``` ### Step 6: 预下载 DeepSeek 模型权重 (可选) 从 GCS 快速复制预缓存的 DeepSeek-V3 模型权重,避免从 HuggingFace 下载: ```bash # 检查是否已经下载过 DEEPSEEK_PATH="/lssd/huggingface/hub/models--deepseek-ai--DeepSeek-V3" if [ -d "$DEEPSEEK_PATH" ]; then echo "✓ DeepSeek-V3 权重已存在: $DEEPSEEK_PATH" du -sh "$DEEPSEEK_PATH" else echo "下载 DeepSeek-V3 权重从 GCS..." gcloud storage cp -r gs://chrisya-gpu-pg-ase1/huggingface /lssd/ echo "✓ DeepSeek-V3 权重下载完成" fi ``` **说明:** - GCS bucket `gs://chrisya-gpu-pg-ase1/huggingface` 包含预缓存的 DeepSeek-V3 FP8 权重 - 从 GCS 下载比从 HuggingFace 快很多(同区域带宽高) - 权重约 ~600GB,包含完整的 safetensors 文件 ## Common Scenarios ### Scenario 1: LSSD 已挂载 ``` $ ./scripts/check-lssd.sh [OK] /lssd 已挂载 容量: 11T | 已用: 2.3T | 可用: 8.7T | 使用率: 21% RAID 状态: md0 : active raid0 nvme31n1[31] nvme30n1[30] ... [32/32] [UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU] HF_HOME: /lssd/huggingface ``` ### Scenario 2: 有 SSD 但未挂载 ``` $ ./scripts/check-lssd.sh [INFO] /lssd 未挂载 [INFO] 检测到 32 块 NVMe SSD [INFO] 运行 sudo ./scripts/mount-lssd.sh 来挂载 ``` ### Scenario 3: 没有 Local SSD ``` $ ./scripts/check-lssd.sh [WARN] 未检测到 NVMe SSD [INFO] 此 VM 可能未配置 Local SSD ``` ### Scenario 4: md0 已存在但未挂载 ``` $ ./scripts/mount-lssd.sh [INFO] RAID 设备 /dev/md0 已存在,跳过创建 [INFO] 挂载 /dev/md0 到 /lssd... [OK] LSSD 挂载完成 ``` ## Troubleshooting ### 问题: mdadm 创建失败 - 包含了系统盘 **症状:** ``` mdadm: super1.x cannot open /dev/nvmeXn1: Device or resource busy mdadm: /dev/nvmeXn1 is not suitable for this array. ``` 或 ``` mdadm: chunk size must be a power of 2, not 33 ``` **根因:** 使用 `ls /dev/nvme*n1 | grep -v nvme0` 来排除系统盘是**不可靠的**。系统盘的 NVMe 编号不固定: - 有些机器系统盘是 `nvme0n1` - 有些机器系统盘是 `nvme32n1`(如 a3-megagpu-8g 实测) - 编号取决于 PCIe 枚举顺序,不同机器可能不同 **诊断:** 用 `lsblk` 查看哪个 NVMe 有分区(系统盘有 p1/p14/p15/p16 分区): ```bash lsblk /dev/nvme*n1 | grep -E 'part|disk' # 系统盘特征: 2TB 大小,有多个分区(p1 挂载 /) # 数据盘特征: 375GB 大小,无分区 ``` **解决方案:** 仅选择 375GB 的 Local SSD,排除系统盘: ```bash # 方法 1: 通过 google-local-nvme-ssd 符号链接(推荐,最可靠) NVME_DEVICES=$(ls /dev/disk/by-id/google-local-nvme-ssd-* 2>/dev/null | sort) # 方法 2: 通过设备大小过滤(375GB = 402653184000 bytes) NVME_DEVICES=$(lsblk -d -b -o NAME,SIZE | awk '$2 == 402653184000 {print "/dev/"$1}' | sort) # 方法 3: 排除有分区的设备(即排除系统盘) NVME_DEVICES=$(lsblk -d -n -o NAME,TYPE | awk '$2=="disk" && /^nvme/' | while read name _; do [ "$(lsblk -n /dev/$name | wc -l)" -eq 1 ] && echo "/dev/$name" done | sort) ``` **警告:** 不要使用 `grep -v nvme0` — 系统盘不一定是 nvme0。 ### 问题: mdadm 命令未找到 **解决方案:** ```bash sudo apt-get update && sudo apt-get install -y mdadm ``` ### 问题: mount 失败 - 文件系统损坏 **诊断:** ```bash sudo fsck /dev/md0 ``` **解决方案:** 如果数据不重要,可以重新格式化: ```bash sudo mkfs.ext4 -F /dev/md0 sudo mount /dev/md0 /lssd ``` ### 问题: RAID 阵列降级 **诊断:** ```bash cat /proc/mdstat ``` **说明:** Local SSD 数据在 VM 停止后会丢失,这是正常的。重新启动后需要重新创建 RAID。 ### 问题: 挂载后权限问题 **解决方案:** ```bash sudo chmod a+w /lssd sudo chmod a+w /lssd/huggingface ``` ## Verification ### 检查 RAID 状态 ```bash cat /proc/mdstat ``` 期望输出: ``` md0 : active raid0 nvme31n1[31] nvme30n1[30] ... 12497551360 blocks super 1.2 512k chunks ``` ### 检查挂载状态 ```bash df -h /lssd ``` 期望输出: ``` Filesystem Size Used Avail Use% Mounted on /dev/md0 12T 24K 12T 1% /lssd ``` ### 验证 HuggingFace 缓存 ```bash echo $HF_HOME ls -la /lssd/huggingface ``` ## Environment Variables | Variable | Value | Description | |----------|-------|-------------| | HF_HOME | /lssd/huggingface | HuggingFace 模型和数据集缓存目录 | ## Performance Notes - **读取带宽**: ~680 MB/s per SSD (RAID0: 线性扩展) - **写入带宽**: ~360 MB/s per SSD (RAID0: 线性扩展) - **IOPS**: ~400,000 per SSD 32 块 SSD RAID0 配置可提供: - 读取: ~20 GB/s - 写入: ~11 GB/s ## Resources ### scripts/ - `mount-lssd.sh` - 自动检测并挂载 Local SSD - `check-lssd.sh` - 检查 LSSD 状态和配置 ## Data Persistence Warning **重要**: Google Cloud Local SSD 数据在以下情况会丢失: - VM 停止 (stop) - VM 抢占 (preemption) - 主机维护事件 Local SSD 仅适用于: - 临时缓存 (如 HuggingFace 模型) - 可重新生成的检查点 - 临时数据处理 不要在 Local SSD 上存储无法恢复的重要数据。
Voir sur GitHub