File size: 5,821 Bytes
26d5b81
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#!/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 提交配置,回复我即可。"