cwenzi/neuroflow-cpp
1
1#!/bin/bash2# ════════════════════════════════════════════════════════3# NeuroFlow — 阿里天池 JupyterLab 一键部署脚本4# 使用前必读:5# 1. 在天池控制台完成登录,并把登录保持时间建议改为 24 小时并重新登录6# 2. 避免在 JupyterLab 工具运行中登录态失效导致 kernel 中断7# 3. GPU 实例按时计费,不使用时及时停止8# 用法: 在天池 JupyterLab 终端运行:9# bash scripts/deploy_tianchi.sh10# ════════════════════════════════════════════════════════11 12set -e13 14echo "╔══════════════════════════════════════════════════╗"15echo "║ NeuroFlow 天池 JupyterLab 自动部署脚本 ║"16echo "╚══════════════════════════════════════════════════╝"17echo ""18echo "⚠️ 使用前请先在阿里云控制台完成登录,"19echo " 建议把登录保持时间改为 24 小时并重新登录。"20echo " 若 kernel 后续中断,通常就是登录态过期导致。"21echo ""22 23# ── 0. 检查 GPU ──24echo "🔍 [1/6] 检查 GPU 环境..."25nvidia-smi || {26 echo "❌ 未检测到 GPU,请确认当前实例已挂载 GPU。"27 exit 128}29nvidia-smi --query-gpu=name,memory.total --format=csv,noheader30 31# ── 1. 安装依赖 ──32echo ""33echo "📦 [2/6] 安装编译依赖..."34apt-get update -qq35apt-get install -y -qq cmake build-essential git python3 python3-pip libomp-dev 2>/dev/null36 37# CUDA 提示38if command -v nvcc &>/dev/null; then39 echo " CUDA: $(nvcc --version | grep 'release' | awk '{print $6}' | tr -d ',')"40else41 echo " ⚠️ nvcc 未找到,若天池镜像未预装,请使用官方 CUDA 镜像/环境。"42fi43 44# ── 2. 获取代码 ──45echo ""46echo "📥 [3/6] 获取 NeuroFlow 源码..."47REPO_URL="https://github.com/chenzhiwenhphp12-afk/neuroflow-model.git"48if [ -d "neuroflow-model" ]; then49 echo " 检测到已有目录 neuroflow-model,尝试拉取更新..."50 cd neuroflow-model || true51 git pull || true52else53 git clone "$REPO_URL" neuroflow-model || {54 echo " ⚠️ GitHub 克隆失败,请检查网络;若不可达,请手动上传 neuroflow-model 仓库。"55 exit 156 }57 cd neuroflow-model58fi59 60echo " 当前目录: $(pwd)"61 62# ── 3. 准备训练数据 ──63echo ""64echo "📝 [4/6] 准备训练数据..."65if [ ! -f "data/train.txt" ]; then66 mkdir -p data67 python3 - <<'PY'68import os69if not os.path.exists('data/train.txt'):70 samples = []71 for i in range(2000):72 samples.append(f'这是第{i}条训练数据,用于NeuroFlow模型的预训练和微调任务。')73 with open('data/train.txt', 'w', encoding='utf-8') as f:74 f.write('\n'.join(samples))75 print(f' 已生成 {len(samples)} 条训练样本 -> data/train.txt')76else:77 print(' 训练数据已存在: data/train.txt')78PY79else80 echo " 训练数据已存在: data/train.txt"81fi82 83# ── 4. 编译 ──84echo ""85echo "🔧 [5/6] 编译 NeuroFlow (CUDA 模式)..."86HAS_CUDA=false87if [ -f /usr/local/cuda/include/cuda.h ] || [ -d /usr/local/cuda ]; then88 HAS_CUDA=true89fi90 91if [ "$HAS_CUDA" = true ]; then92 echo " 使用 CUDA 后端编译..."93 cmake -B build_cuda \94 -DNEUROFLOW_USE_CUDA=ON \95 -DNEUROFLOW_USE_AVX2=ON \96 -DNEUROFLOW_USE_BLAS=OFF \97 -DCMAKE_BUILD_TYPE=Release98 cmake --build build_cuda -j"$(nproc)"99 BUILD_DIR="build_cuda"100else101 echo " ⚠️ 未检测到 CUDA,使用 CPU OpenMP 编译..."102 cmake -B build_cpu \103 -DNEUROFLOW_USE_CUDA=OFF \104 -DNEUROFLOW_USE_AVX2=ON \105 -DNEUROFLOW_USE_BLAS=OFF \106 -DCMAKE_BUILD_TYPE=Release107 cmake --build build_cpu -j"$(nproc)"108 BUILD_DIR="build_cpu"109fi110 111echo "✅ 编译完成!二进制文件在 ./$BUILD_DIR/"112 113# ── 5. 运行训练 ──114echo ""115echo "🚀 [6/6] 开始训练验证..."116echo "════════════════════════════════════════════════════"117echo " 配置: configs/config_distill.json"118echo " 数据: data/train.txt"119echo " GPU: $(nvidia-smi --query-gpu=name --format=csv,noheader)"120echo " 显存: $(nvidia-smi --query-gpu=memory.total --format=csv,noheader)"121echo "════════════════════════════════════════════════════"122 123./$BUILD_DIR/neuroflow_train_v2 \124 --config configs/config_distill.json \125 --data data/train.txt \126 --output output_tianchi \127 --epochs 5 \128 --batch-size 64 \129 --lr 0.001 \130 --use-cuda \131 --adam \132 --log-interval 10 || {133 echo ""134 echo "❌ 训练启动失败。"135 echo " 建议先检查:登录态是否过期、kernel 是否断开、CUDA 是否可用。"136 exit 1137 }138 139echo ""140echo "🎉 训练完成!"141echo " 模型保存在: output_tianchi/"142echo ""143echo " 🔜 下一步"144echo " 1) 全量训练示例:"145echo " ./$BUILD_DIR/neuroflow_train_v2 \\"146echo " --config configs/config.json \\"147echo " --data data/train.txt \\"148echo " --output output_full \\"149echo " --epochs 100 \\"150echo " --batch-size 64 \\"151echo " --lr 0.0001 \\"152echo " --use-cuda --adam"153echo ""154echo " 2) DLC 任务提交:"155echo " 如需我继续帮你准备天池 DLC 提交配置,回复我即可。"156 