北城旺角做网站的微能力者恶魔网站谁做的
2026/2/22 11:23:34 网站建设 项目流程
北城旺角做网站的,微能力者恶魔网站谁做的,wordpress 架构图,工商注册地址查询系统ms-swift定时任务#xff1a;夜间自动执行训练计划 1. 为什么需要夜间自动训练#xff1f; 你有没有遇到过这样的情况#xff1a;白天要跑实验#xff0c;GPU卡被占满#xff0c;等晚上回家想继续训练#xff0c;却发现忘记启动了#xff1f;或者训练到一半突然断电夜间自动执行训练计划1. 为什么需要夜间自动训练你有没有遇到过这样的情况白天要跑实验GPU卡被占满等晚上回家想继续训练却发现忘记启动了或者训练到一半突然断电所有进度清零又或者想让模型在空闲时段悄悄学习第二天一早就能看到最新结果ms-swift本身不内置定时调度功能但它提供了足够灵活的命令行接口和稳定可靠的训练机制配合系统级定时工具如cron就能轻松实现“夜间自动执行训练计划”——就像给你的AI训练装上了一个智能闹钟。这不是一个高深莫测的黑科技而是一套简单、可靠、可复现的工程实践方案。本文将手把手带你搭建一套完整的夜间训练自动化流程涵盖环境准备、脚本编写、错误防护、日志管理、结果通知等关键环节让你从此告别手动值守真正实现“提交即离开醒来见成果”。整个方案完全基于Linux系统原生能力无需额外部署复杂调度平台零学习成本5分钟即可上线。2. 核心思路命令行 系统定时器 自动化训练2.1 本质逻辑很朴素ms-swift的所有训练、推理、导出操作都通过swift命令完成。它本质上就是一个Python CLI工具输入参数明确输出日志规范退出码语义清晰0表示成功非0表示失败。这正是自动化调度最理想的接口形态。我们只需要做三件事把训练命令写成一个可独立运行的Shell脚本给这个脚本加上健壮的容错和状态检查用系统cron在指定时间比如凌晨2点触发它就这么简单。没有魔法只有工程细节。2.2 为什么选cron而不是其他方案轻量无依赖Linux发行版默认自带无需安装额外服务如Airflow、Celery稳定可靠运行数十年是服务器运维的基石工具精准可控支持秒级精度通过systemd timer可扩展、可指定用户、可限制资源调试友好日志直接输出到文件出问题一眼可见当然如果你用的是Kubernetes集群也可以用CronJob如果是Windows可用任务计划程序。但本文聚焦最通用、最落地的Linux场景。3. 实战从零搭建夜间训练脚本3.1 准备工作确保ms-swift环境就绪首先确认你的训练环境已配置完毕。以下命令应在任意终端中能正常执行# 检查ms-swift版本确保≥1.10.0 swift --version # 测试基础命令是否可用 swift sft --help | head -n 5如果提示command not found请先完成环境安装# 创建专用conda环境推荐避免污染主环境 conda create -n swift-nightly python3.10 conda activate swift-nightly pip install ms-swift[all] -U -i https://pypi.tuna.tsinghua.edu.cn/simple # 验证安装 swift --version小贴士强烈建议为自动化任务创建独立环境。这样即使你日常开发升级了ms-swift也不会影响夜间任务的稳定性。3.2 编写核心训练脚本nightly_sft.sh下面是一个生产级可用的夜间训练脚本。它不是简单的一行命令而是包含了路径安全检查、GPU占用检测、训练状态判断、失败重试、日志归档等实用功能。请将以下内容保存为~/scripts/nightly_sft.sh路径可自定义#!/bin/bash # # ms-swift 夜间自动训练脚本 # 功能每日凌晨2:30执行Qwen2.5-7B-Instruct的LoRA微调 # 作者AI工程实践者 # 最后更新2024-09-01 # # --- 配置区按需修改--- MODEL_IDQwen/Qwen2.5-7B-Instruct DATASETAI-ModelScope/alpaca-gpt4-data-zh#500 OUTPUT_DIR/data/train/nightly-qwen25 LOG_DIR/data/log/nightly-sft MAX_RETRY3 RETRY_DELAY60 # 秒 # --- 环境与路径检查 --- set -e # 任何命令失败立即退出 export PATH/opt/conda/bin:$PATH # 确保conda命令可用 source /opt/conda/etc/profile.d/conda.sh conda activate swift-nightly # 创建必要目录 mkdir -p $OUTPUT_DIR $LOG_DIR # 检查GPU是否空闲避免与其他任务冲突 GPU_BUSY$(nvidia-smi --query-compute-appspid --formatcsv,noheader | wc -l) if [ $GPU_BUSY -gt 0 ]; then echo [$(date)] GPU BUSY! $(nvidia-smi --query-compute-appspid,used_memory --formatcsv) - 退出本次训练 $LOG_DIR/error.log exit 1 fi # --- 训练主逻辑带重试--- ATTEMPT1 while [ $ATTEMPT -le $MAX_RETRY ]; do echo [$(date)] 开始第 $ATTEMPT 次训练尝试... # 生成唯一时间戳用于日志和输出目录 TIMESTAMP$(date %Y%m%d-%H%M%S) RUN_LOG$LOG_DIR/sft_${TIMESTAMP}.log RUN_OUTPUT$OUTPUT_DIR/run_${TIMESTAMP} # 执行ms-swift训练命令精简版仅保留关键参数 CUDA_VISIBLE_DEVICES0 \ swift sft \ --model $MODEL_ID \ --dataset $DATASET \ --train_type lora \ --output_dir $RUN_OUTPUT \ --num_train_epochs 1 \ --per_device_train_batch_size 1 \ --learning_rate 1e-4 \ --lora_rank 8 \ --max_length 2048 \ --logging_steps 10 \ --save_steps 50 \ --eval_steps 50 \ --torch_dtype bfloat16 \ --seed 42 \ 21 | tee $RUN_LOG # 检查训练是否成功ms-swift成功结束会返回0 if [ $? -eq 0 ]; then echo [$(date)] 训练成功结果保存在: $RUN_OUTPUT echo [$(date)] 日志详见: $RUN_LOG # 可选发送成功通知例如邮件或企业微信机器人 # curl -X POST https://qyapi.weixin.qq.com/cgi-bin/webhook/send?keyxxx \ # -H Content-Type: application/json \ # -d {msgtype: text, text: {content: 夜间训练成功\n模型: $MODEL_ID\n时间: $TIMESTAMP\n路径: $RUN_OUTPUT}} exit 0 else echo [$(date)] 第 $ATTEMPT 次训练失败等待 $RETRY_DELAY 秒后重试... sleep $RETRY_DELAY ATTEMPT$((ATTEMPT 1)) fi done echo [$(date)] 已达到最大重试次数($MAX_RETRY)训练失败。 $LOG_DIR/error.log exit 1脚本关键设计说明set -e确保任一命令失败立即终止防止错误累积nvidia-smi检测避免与白天任务抢GPU提升成功率时间戳命名每次运行生成独立日志和输出目录永不覆盖重试机制网络抖动、磁盘瞬时IO等问题可自动恢复tee命令同时输出到控制台和日志文件便于调试3.3 赋予执行权限并测试# 添加执行权限 chmod x ~/scripts/nightly_sft.sh # 手动运行一次验证脚本是否能正常工作注意首次运行会下载模型较慢 ~/scripts/nightly_sft.sh # 检查输出目录和日志 ls -lh /data/train/nightly-qwen25/ tail -n 20 /data/log/nightly-sft/sft_*.log如果看到类似Saving model checkpoint to ...和End time of running main的日志说明脚本已就绪。4. 配置系统定时器让脚本准时开工4.1 编辑当前用户的crontab# 编辑定时任务列表 crontab -e在打开的编辑器中添加以下一行# 每日凌晨2:30执行夜间训练 30 2 * * * /home/your_username/scripts/nightly_sft.sh /data/log/nightly-sft/cron.log 21注意替换your_username为你实际的用户名并确保路径与你保存脚本的位置一致。30 2 * * *的含义是每月每天的2点30分执行。cron语法格式为分 时 日 月 周。4.2 验证cron是否生效# 查看当前用户的定时任务 crontab -l # 查看cron服务状态通常默认启用 sudo systemctl status cron # 手动触发一次用于测试不等待到2:30 # 注意cron会以用户身份运行所以环境变量可能不同务必在脚本内显式激活conda4.3 关键解决cron环境变量问题这是新手最容易踩的坑cron执行时不会加载你的.bashrc或.zshrc因此conda、python路径、CUDA环境变量全都不生效。正确解法已在脚本中体现在脚本开头显式source /opt/conda/etc/profile.d/conda.sh显式conda activate swift-nightly使用绝对路径调用swift或确保PATH已正确设置你也可以在crontab中直接设置环境变量# 在crontab顶部添加推荐方式 SHELL/bin/bash PATH/opt/conda/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin HOME/home/your_username 30 2 * * * /home/your_username/scripts/nightly_sft.sh /data/log/nightly-sft/cron.log 215. 进阶让夜间训练更聪明、更省心5.1 智能跳过只在有新数据时才训练频繁训练同一份数据意义不大。我们可以加一层“数据新鲜度”检查# 在脚本中加入放在nvidia-smi检查之后 DATA_SOURCE/data/dataset/alpaca-zh LAST_MODIFIED$(stat -c %y $DATA_SOURCE 2/dev/null | cut -d -f1) TODAY$(date %Y-%m-%d) if [ $LAST_MODIFIED ! $TODAY ]; then echo [$(date)] 数据源 $DATA_SOURCE 今日未更新最后修改$LAST_MODIFIED跳过训练 exit 0 fi这样只有当天数据有更新夜间任务才会启动。5.2 结果自动归档与清理避免日志和模型堆积如山。在脚本末尾添加# 训练成功后自动清理7天前的日志 find $LOG_DIR -name sft_*.log -mtime 7 -delete 2/dev/null find $LOG_DIR -name error.log -mtime 7 -delete 2/dev/null # 只保留最近3次的成功训练结果节省磁盘 ls -t $OUTPUT_DIR/run_* | tail -n 4 | xargs -r rm -rf5.3 失败自动告警当训练连续失败3次发消息提醒你介入# 在重试循环结束后添加 FAILED_COUNT$(grep -c 训练失败 $LOG_DIR/error.log | tail -c 1) if [ $FAILED_COUNT -ge 3 ]; then echo 严重警告夜间训练已连续失败3次请立即检查。 | mail -s 【AI训练告警】ms-swift夜间任务异常 your_emailexample.com fi6. 效果验证与日常维护6.1 如何确认任务真的在运行查看cron日志sudo tail -f /var/log/syslog | grep CRON查看你的日志目录ls -lt /data/log/nightly-sft/检查进程ps aux | grep nightly_sft.sh6.2 日常维护清单项目操作频率检查磁盘空间df -h /data每周查看最近3次日志tail -n 50 /data/log/nightly-sft/sft_*.log | head -n 20每日晨会更新ms-swiftpip install ms-swift[all] -U每月一次升级前先备份旧环境验证GPU健康nvidia-smi -q -d MEMORY,UTILIZATION每月6.3 一个真实的运行日志片段[2024-09-01 02:30:01] 开始第 1 次训练尝试... [2024-09-01 02:30:05] GPU BUSY! No running processes found - 继续执行 [2024-09-01 02:30:10] Loading checkpoint shards: 100%|██████████| 4/4 [00:0200:00, 1.82it/s] [2024-09-01 03:15:22] Saving model checkpoint to /data/train/nightly-qwen25/run_20240901-023001/checkpoint-873 [2024-09-01 03:15:25] End time of running main: 2024-09-01 03:15:25.123456 [2024-09-01 03:15:25] 训练成功结果保存在: /data/train/nightly-qwen25/run_20240901-023001看到这样的日志你就知道——你的AI正在你熟睡时默默进化。7. 总结自动化不是目的而是释放创造力的起点我们花了不到100行Shell脚本就为ms-swift赋予了“夜间自主学习”的能力。这背后体现的是一种典型的AI工程思维拥抱工具链不重复造轮子用好Linuxms-swift这两个成熟、稳定的基石关注可观测性每一步都有日志每一次失败都有记录让不确定性变得可追踪设计防御性逻辑GPU检测、重试、超时、清理让自动化真正可靠从手动到自动只差一个脚本的距离。这套方案可以轻松迁移到其他任务swift rlhf做夜间强化学习对齐swift eval定期评测模型性能衰减swift export自动量化并导出最新模型当你把重复性劳动交给机器你的时间才能真正投入到更有价值的地方——比如思考下一个创新点子或者安心睡个好觉。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询