neuroflow-cpp / scripts /deploy_tianchi.sh
cwenzi's picture
Upload folder using huggingface_hub
26d5b81 verified
Raw
History Blame Contribute Delete
5.82 kB
#!/bin/bash
# ════════════════════════════════════════════════════════
# NeuroFlow — 阿里天池 JupyterLab 一键部署脚本
# 使用前必读:
# 1. 在天池控制台完成登录,并把登录保持时间建议改为 24 小时并重新登录
# 2. 避免在 JupyterLab 工具运行中登录态失效导致 kernel 中断
# 3. GPU 实例按时计费,不使用时及时停止
# 用法: 在天池 JupyterLab 终端运行:
# bash scripts/deploy_tianchi.sh
# ════════════════════════════════════════════════════════
set -e
echo "╔══════════════════════════════════════════════════╗"
echo "║ NeuroFlow 天池 JupyterLab 自动部署脚本 ║"
echo "╚══════════════════════════════════════════════════╝"
echo ""
echo "⚠️ 使用前请先在阿里云控制台完成登录,"
echo " 建议把登录保持时间改为 24 小时并重新登录。"
echo " 若 kernel 后续中断,通常就是登录态过期导致。"
echo ""
# ── 0. 检查 GPU ──
echo "🔍 [1/6] 检查 GPU 环境..."
nvidia-smi || {
echo "❌ 未检测到 GPU,请确认当前实例已挂载 GPU。"
exit 1
}
nvidia-smi --query-gpu=name,memory.total --format=csv,noheader
# ── 1. 安装依赖 ──
echo ""
echo "📦 [2/6] 安装编译依赖..."
apt-get update -qq
apt-get install -y -qq cmake build-essential git python3 python3-pip libomp-dev 2>/dev/null
# CUDA 提示
if command -v nvcc &>/dev/null; then
echo " CUDA: $(nvcc --version | grep 'release' | awk '{print $6}' | tr -d ',')"
else
echo " ⚠️ nvcc 未找到,若天池镜像未预装,请使用官方 CUDA 镜像/环境。"
fi
# ── 2. 获取代码 ──
echo ""
echo "📥 [3/6] 获取 NeuroFlow 源码..."
REPO_URL="https://github.com/chenzhiwenhphp12-afk/neuroflow-model.git"
if [ -d "neuroflow-model" ]; then
echo " 检测到已有目录 neuroflow-model,尝试拉取更新..."
cd neuroflow-model || true
git pull || true
else
git clone "$REPO_URL" neuroflow-model || {
echo " ⚠️ GitHub 克隆失败,请检查网络;若不可达,请手动上传 neuroflow-model 仓库。"
exit 1
}
cd neuroflow-model
fi
echo " 当前目录: $(pwd)"
# ── 3. 准备训练数据 ──
echo ""
echo "📝 [4/6] 准备训练数据..."
if [ ! -f "data/train.txt" ]; then
mkdir -p data
python3 - <<'PY'
import os
if not os.path.exists('data/train.txt'):
samples = []
for i in range(2000):
samples.append(f'这是第{i}条训练数据,用于NeuroFlow模型的预训练和微调任务。')
with open('data/train.txt', 'w', encoding='utf-8') as f:
f.write('\n'.join(samples))
print(f' 已生成 {len(samples)} 条训练样本 -> data/train.txt')
else:
print(' 训练数据已存在: data/train.txt')
PY
else
echo " 训练数据已存在: data/train.txt"
fi
# ── 4. 编译 ──
echo ""
echo "🔧 [5/6] 编译 NeuroFlow (CUDA 模式)..."
HAS_CUDA=false
if [ -f /usr/local/cuda/include/cuda.h ] || [ -d /usr/local/cuda ]; then
HAS_CUDA=true
fi
if [ "$HAS_CUDA" = true ]; then
echo " 使用 CUDA 后端编译..."
cmake -B build_cuda \
-DNEUROFLOW_USE_CUDA=ON \
-DNEUROFLOW_USE_AVX2=ON \
-DNEUROFLOW_USE_BLAS=OFF \
-DCMAKE_BUILD_TYPE=Release
cmake --build build_cuda -j"$(nproc)"
BUILD_DIR="build_cuda"
else
echo " ⚠️ 未检测到 CUDA,使用 CPU OpenMP 编译..."
cmake -B build_cpu \
-DNEUROFLOW_USE_CUDA=OFF \
-DNEUROFLOW_USE_AVX2=ON \
-DNEUROFLOW_USE_BLAS=OFF \
-DCMAKE_BUILD_TYPE=Release
cmake --build build_cpu -j"$(nproc)"
BUILD_DIR="build_cpu"
fi
echo "✅ 编译完成!二进制文件在 ./$BUILD_DIR/"
# ── 5. 运行训练 ──
echo ""
echo "🚀 [6/6] 开始训练验证..."
echo "════════════════════════════════════════════════════"
echo " 配置: configs/config_distill.json"
echo " 数据: data/train.txt"
echo " GPU: $(nvidia-smi --query-gpu=name --format=csv,noheader)"
echo " 显存: $(nvidia-smi --query-gpu=memory.total --format=csv,noheader)"
echo "════════════════════════════════════════════════════"
./$BUILD_DIR/neuroflow_train_v2 \
--config configs/config_distill.json \
--data data/train.txt \
--output output_tianchi \
--epochs 5 \
--batch-size 64 \
--lr 0.001 \
--use-cuda \
--adam \
--log-interval 10 || {
echo ""
echo "❌ 训练启动失败。"
echo " 建议先检查:登录态是否过期、kernel 是否断开、CUDA 是否可用。"
exit 1
}
echo ""
echo "🎉 训练完成!"
echo " 模型保存在: output_tianchi/"
echo ""
echo " 🔜 下一步"
echo " 1) 全量训练示例:"
echo " ./$BUILD_DIR/neuroflow_train_v2 \\"
echo " --config configs/config.json \\"
echo " --data data/train.txt \\"
echo " --output output_full \\"
echo " --epochs 100 \\"
echo " --batch-size 64 \\"
echo " --lr 0.0001 \\"
echo " --use-cuda --adam"
echo ""
echo " 2) DLC 任务提交:"
echo " 如需我继续帮你准备天池 DLC 提交配置,回复我即可。"