# 网络安全大模型训练系统 # 神机 - 网络安全大模型训练系统 神机是一个专门针对网络安全领域的AI大模型训练系统,默认基于Qwen2.5模型进行LoRA微调。兼容大部分大模型。由云霖网络安全实验室开发,采用模块化架构设计,具备完整的身份认知和专业的网络安全知识体系。本项目当中已经包含5万多条训练数据,默认即可开始训练自身的数据 ## 🚀 功能特点 ### 核心功能 - **神机身份认知**: 模型具备完整的"神机"身份认知,由云霖网络安全实验室训练 - **动态身份设置**: 支持在推理时动态设置模型身份,无需修改模型文件 - **网络安全专精**: 专门针对网络安全、渗透测试、代码审计等场景优化 - **全自动化训练**: 一键启动,自动完成数据下载、环境配置、模型训练全流程 - **统一测试框架**: 集成化测试系统,支持多种测试场景 - **小显存优化**: 针对6GB显存进行优化,支持LoRA微调 - **中文理解**: 增强中文网络安全术语和概念的理解能力 - **实时监控**: 提供训练进度监控和系统状态监控 - **模块化架构**: 采用分层架构,代码结构清晰,易于维护和扩展 ### 技术特性 - 默认基于Qwen2.5-1.5B模型 - LoRA (Low-Rank Adaptation) 微调技术 - Chat Template动态身份设置 - 支持ModelScope和HuggingFace双源下载 - 自动混合精度训练 (FP16) - 梯度累积和检查点保存 - 多数据源融合训练 - 统一测试框架 - 模块化设计,易于扩展 ## 📋 系统要求 ### 最低硬件要求 - **GPU**: NVIDIA P106-100 6GB 或更高 - **内存**: 16GB+ 推荐 - **存储**: 50GB+ 可用空间 - **网络**: 稳定的网络连接(用于下载模型和数据) ### 软件要求 - **操作系统**: Linux (Ubuntu 18.04+) - **Python**: 3.8+ - **CUDA**: 11.0+ - **其他**: screen, git ## 🚀 快速开始 ### ⚡ 5分钟快速上手 **新用户推荐**: 查看 [5分钟快速开始指南](QUICKSTART.md) 快速上手! ### 1. 环境准备 ```bash # 克隆或下载项目文件 cd /qwen # 给启动脚本执行权限 chmod +x start_training.sh # 安装系统依赖 sudo apt-get update sudo apt-get install -y screen python3-venv python3-pip ``` ### 2. 环境检查(推荐) ```bash # 🔍 一键检查环境是否就绪 python check_environment.py # 或使用启动脚本进行环境检查 ./start_training.sh --mode check ``` 如果环境检查失败,请按照提示安装缺失的依赖: ```bash pip install -r requirements.txt ``` ### 3. 一键启动训练 ```bash # 启动自动化训练(推荐) bash start_training.sh ``` 这个脚本会自动完成: - 创建Python虚拟环境 - 安装所有依赖包 - 下载和处理训练数据 - 启动后台训练 - 设置监控和日志 ### 4. 自定义训练数据(可选) #### 放置数据文件 将你的训练数据文件放在: - **自动加载模式**:`/qwen/data/processed/` 目录下的任意 `.json` `.jsonl` 文件 - **指定文件模式**:`/qwen/data/processed/your_custom_name.json` #### 程序自动加载 - **默认行为**:程序会自动扫描并加载 `/qwen/data/processed/` 目录下的所有 `.json` `.jsonl` 文件 - **多文件支持**:可以同时放置多个训练文件,程序会自动合并所有数据 - **指定文件**:如需加载特定文件,可在训练时指定文件名 #### 数据文件格式 训练数据应为JSON、.jsonl格式,支持以下两种结构: **方式1:对话格式(推荐)** ```json [ { "text": "<|im_start|>system\n你是一个网络安全专家...<|im_end|>\n<|im_start|>user\n如何进行SQL注入测试?<|im_end|>\n<|im_start|>assistant\nSQL注入测试的步骤包括...<|im_end|>" }, { "text": "<|im_start|>system\n你是一个编程专家...<|im_end|>\n<|im_start|>user\n编写一个端口扫描器<|im_end|>\n<|im_start|>assistant\n以下是端口扫描器的代码...<|im_end|>" } ] ``` **方式2:指令格式** ```json [ { "instruction": "如何进行SQL注入测试?", "input": "", "output": "SQL注入测试的步骤包括...", "category": "security" } ] ``` **使用示例:** ```bash # 创建数据目录 mkdir -p /qwen/data/processed # 放置多个训练文件 cp my_security_data.json /qwen/data/processed/ cp my_code_data.json /qwen/data/processed/ cp my_custom_data.json /qwen/data/processed/ # 启动训练(自动加载所有文件) ./start_training.sh --mode train ``` ### 3. 详细使用方法 #### 启动脚本选项 ```bash # 显示帮助 ./start_training.sh --help # 完整训练流程 (默认) ./start_training.sh ./start_training.sh --mode full # 仅数据下载和处理 ./start_training.sh --mode data # 强制重新下载数据 ./start_training.sh --mode data --force-download # 仅模型训练 ./start_training.sh --mode train # 仅模型测试 ./start_training.sh --mode test # 交互式对话 ./start_training.sh --mode interactive # 环境检查 ./start_training.sh --mode check # 详细的依赖检查 python check_dependencies.py ``` #### 直接使用Python ```bash # 设置Python路径 export PYTHONPATH="$PWD/src:$PYTHONPATH" # 运行主程序 python main.py --mode full python main.py --mode data python main.py --mode train python main.py --mode test python main.py --mode interactive ``` #### 监控训练 ```bash # 查看screen会话 screen -r security_model_training # 查看日志 tail -f logs/training_*.log # 监控系统状态 python -c "from src.utils.monitor import TrainingMonitor; m=TrainingMonitor(); print(m.get_current_status())" ``` ## 📁 项目结构 ``` qwen/ ├── requirements.txt # Python依赖包 ├── requirements-basic.txt # 基础依赖包 ├── main.py # 主程序入口 ├── start_training.sh # 启动脚本 ├── download_model.py # 模型下载脚本 ├── check_environment.py # 环境检查脚本 ├── README.md # 项目说明文档 ├── QUICKSTART.md # 5分钟快速开始指南 ├── INSTALL.md # 详细安装指南 ├── identity_solution_guide.md # 身份解决方案说明 ├── src/ # 源代码目录 │ ├── __init__.py # 包初始化 │ ├── app.py # 主应用程序 │ ├── config/ # 配置模块 │ │ ├── __init__.py │ │ ├── settings.py # 基础配置 │ │ ├── training_config.py # 训练配置 │ │ └── data_config.py # 数据配置(含神机身份模板) │ ├── data/ # 数据处理模块 │ │ ├── __init__.py │ │ ├── downloader.py # 数据下载器 │ │ ├── processor.py # 数据处理器 │ │ └── loader.py # 数据加载器 │ ├── model/ # 模型管理模块 │ │ ├── __init__.py │ │ ├── downloader.py # 模型下载器 │ │ ├── trainer.py # 模型训练器 │ │ └── inference.py # 模型推理器(支持动态身份) │ └── utils/ # 工具模块 │ ├── __init__.py │ ├── logger.py # 日志工具 │ ├── environment.py # 环境检查 │ └── monitor.py # 训练监控 ├── tests/ # 统一测试框架 │ ├── __init__.py # 测试模块初始化 │ ├── test_runner.py # 统一测试运行器 │ └── README.md # 测试框架说明 ├── examples/ # 示例数据和使用案例 │ ├── sample_data.json # 示例训练数据 │ └── README.md # 示例使用说明 ├── data/ # 数据目录 │ └── processed/ # 处理后数据 │ ├── final_security_training_dataset.jsonl │ ├── security_only_training_dataset.jsonl │ ├── enhanced_test.jsonl │ └── ... # 其他训练数据 ├── models/ # 模型目录 │ └── Qwen_Qwen2.5-1.5B-Instruct/ # 基础模型 │ ├── config.json │ ├── tokenizer_config.json # 包含神机身份模板 │ └── ... # 其他模型文件 ├── checkpoints/ # 训练检查点 │ └── checkpoint-6/ # LoRA适配器 │ ├── adapter_model.safetensors │ ├── chat_template.jinja # 神机身份模板 │ └── ... # 其他检查点文件 ├── logs/ # 日志目录 ├── cache/ # 缓存目录 ├── output/ # 输出目录 └── venv/ # Python虚拟环境 ``` ## 🔧 配置说明 ### 配置文件结构 配置采用模块化设计,分为三个主要部分: #### 1. 基础配置 (src/config/settings.py) ```python class Config: # 项目路径配置 PROJECT_ROOT = "/path/to/project" DATA_DIR = "data" MODEL_DIR = "models" # 模型配置 BASE_MODEL_NAME = "Qwen/Qwen2-1.5B" USE_MODELSCOPE = True DEVICE = "cuda" if torch.cuda.is_available() else "cpu" ``` #### 2. 训练配置 (src/config/training_config.py) ```python class TrainingConfig: # 训练参数 batch_size = 2 learning_rate = 2e-4 num_epochs = 3 max_length = 2048 class LoRAConfig: # LoRA参数 r = 16 alpha = 32 dropout = 0.1 ``` #### 3. 数据配置 (src/config/data_config.py) ```python class DataConfig: # 数据处理参数 max_samples_per_source = 1000 train_test_split = 0.8 min_length = 10 max_length = 2048 ``` ### 数据源配置 系统会自动从以下来源获取训练数据: - 网络安全知识库 - 代码数据集 - 中文对话数据 - WebShell示例代码 - 渗透测试脚本 ## 🔧 高级用法 ### 自定义配置 1. **修改训练参数** ```python # 编辑 src/config/training_config.py class TrainingConfig: batch_size = 4 # 增加批次大小 learning_rate = 1e-4 # 降低学习率 num_epochs = 5 # 增加训练轮数 ``` 2. **添加自定义数据源** ```python # 在 src/data/downloader.py 中添加数据源 class DataDownloader: def download_custom_data(self): custom_data = [ { "instruction": "你的指令", "input": "输入内容", "output": "期望输出" } ] return custom_data ``` 3. **自定义提示模板** ```python # 在 src/config/data_config.py 中修改模板 class PromptTemplates: SECURITY_ANALYSIS = "分析以下安全问题:{question}\n\n分析:{answer}" ``` ### 模块化使用 1. **单独使用数据处理模块** ```python from src.data import DataDownloader, DataProcessor downloader = DataDownloader() processor = DataProcessor() # 下载和处理数据 data = downloader.download_all_data() processed_data = processor.process_data(data) ``` 2. **单独使用模型训练模块** ```python from src.model import SecurityModelTrainer from src.config import TrainingConfig, LoRAConfig trainer = SecurityModelTrainer() trainer.setup_model_and_tokenizer() trainer.train() ``` 3.### 单独使用推理模块** ```python from src.model import SecurityModelInference from src.config.settings import Config # 使用默认模型 config = Config() inference = SecurityModelInference(config) inference.load_model() # 使用指定模型 inference = SecurityModelInference(config, model_key="qwen2.5-7b") inference.load_model(model_key="qwen2.5-7b") response = inference.generate_response("如何进行SQL注入测试?") ``` ### 模型管理 使用模型管理CLI工具来管理多个模型: ```bash # 列出所有可用模型 python scripts/model_manager.py list # 下载指定模型 python scripts/model_manager.py download qwen2.5-1.5b python scripts/model_manager.py download chatglm3-6b # 切换当前模型 python scripts/model_manager.py switch qwen2.5-7b # 显示当前模型信息 python scripts/model_manager.py current # 测试模型推理 python scripts/model_manager.py test qwen2.5-1.5b # 与模型进行交互式对话 python scripts/model_manager.py chat qwen2.5-1.5b # 显示模型详细信息 python scripts/model_manager.py info chatglm3-6b ``` 训练管理 ```bash # 查看所有screen会话 screen -list # 进入训练会话 screen -r security_training # 在会话内分离(不终止训练) # 按 Ctrl+A, 然后按 D # 终止训练 screen -S security_training -X quit # 查看GPU使用情况 watch -n 1 nvidia-smi ``` ## 📊 训练监控 ### 监控界面 运行 `python3 monitor.py` 可以看到: - 训练会话状态 - 当前训练进度 - GPU使用情况 - 系统资源状态 - 最新训练日志 ### 日志文件 - `logs/training_YYYYMMDD_HHMMSS.log`: 训练日志 - `training.log`: 主程序日志 - `training_report.txt`: 训练完成报告 ## 🤖 神机身份解决方案 ### 身份认知特性 神机具备完整的身份认知系统,确保模型始终以"神机"身份回答问题: - **默认身份**: "你是神机,由云霖网络安全实验室训练的网络安全大模型" - **动态设置**: 支持在推理时动态调整身份,无需修改模型文件 - **Chat Template**: 使用标准化的对话模板确保身份一致性 - **多轮对话**: 在整个对话过程中保持身份认知 ### 技术实现 ```python # 使用默认神机身份 from src.model.inference import SecurityModelInference inference = SecurityModelInference() response, history = inference.chat("你是谁?") # 使用自定义身份 custom_system = "你是一个专业的网络安全专家。" response, history = inference.chat("你是谁?", system_message=custom_system) ``` 详细说明请参考:[身份解决方案指南](identity_solution_guide.md) ## 🧪 统一测试框架 ### 测试功能 项目集成了统一的测试框架,支持以下测试项目: - **identity**: 身份解决方案测试 - **data_loader**: 数据加载器测试 - **download**: 模型下载功能测试 - **git_download**: Git下载功能测试 - **inference**: 模型推理功能测试 - **all**: 运行所有测试 ### 使用方法 ```bash # 查看所有可用测试 python tests/test_runner.py --list # 运行单项测试 python tests/test_runner.py --test identity # 运行所有测试 python tests/test_runner.py --test all ``` 详细说明请参考:[测试框架说明](tests/README.md) ## 🎯 模型能力 神机支持多种大语言模型,每个模型都具备以下核心能力: ### 网络安全专业能力 - WebShell代码生成和分析 - 渗透测试脚本编写 - 漏洞分析和利用技术 - 安全工具开发 - 网络攻防技术指导 - CVE漏洞分析 - 安全加固建议 ### 编程开发能力 - Python/PHP/Java等多语言编程 - 网络编程和系统编程 - 安全工具和脚本开发 - 代码审计和漏洞挖掘 - 自动化工具开发 ### 中文理解能力 - 中文技术文档理解 - 中文安全知识问答 - 中文代码注释生成 - 中文安全术语解释 ### 身份认知能力 - 明确的"神机"身份认知 - 云霖网络安全实验室背景 - 专业的网络安全知识体系 - 一致的身份表达 ## 🤖 支持的模型 神机支持多种主流大语言模型,用户可以根据需求选择合适的模型: ### Qwen系列 - **Qwen2.5-1.5B-Instruct**: 轻量级模型,适合资源受限环境 - **Qwen2.5-7B-Instruct**: 平衡性能和资源消耗的中等规模模型 - **Qwen2.5-14B-Instruct**: 高性能模型,适合专业应用 - **Qwen2.5-32B-Instruct**: 大规模模型,提供最佳性能 - **Qwen2.5-72B-Instruct**: 超大规模模型,适合高端应用 ### ChatGLM系列 - **ChatGLM3-6B**: 支持多轮对话的中文优化模型 ### Baichuan系列 - **Baichuan2-7B-Chat**: 中文能力强的对话模型 - **Baichuan2-13B-Chat**: 更大规模的中文对话模型 ### Llama系列 - **Llama2-7B-Chat**: Meta开源的对话模型 - **Llama2-13B-Chat**: 更大规模的Llama对话模型 每个模型都经过专门的适配和优化,确保在网络安全领域的专业表现。 ## ⚠️ 注意事项 ### 训练时间 - 预计训练时间:6-12小时 - 具体时间取决于数据量和硬件性能 - 建议在夜间或空闲时间进行训练 ### 显存优化 - 如果显存不足,可以减小 `batch_size` 或 `max_length` - 增加 `gradient_accumulation_steps` 来保持有效批次大小 - 确保启用 `fp16` 混合精度训练 ### 数据安全 - 训练数据包含网络安全相关内容 - 生成的模型可能输出敏感代码 - 请确保在安全环境中使用 - 遵守相关法律法规 ### 模型使用 - 神机模型专为教育和研究目的设计 - 请负责任地使用生成的安全工具代码 - 不要用于非法攻击活动 - 模型具备明确的身份认知,请尊重其专业性 ## 🔍 故障排除 ### 常见错误 1. **CUDA out of memory** ```bash # 解决方案:降低批次大小 # 编辑 src/config/training_config.py class TrainingConfig: batch_size = 1 gradient_accumulation_steps = 16 ``` 2. **模型下载失败** ```bash # 解决方案:切换数据源 # 编辑 src/config/settings.py class Config: USE_MODELSCOPE = False # 切换到HuggingFace ``` 3. **模块导入错误** ```bash # 解决方案:设置Python路径 export PYTHONPATH="$PWD/src:$PYTHONPATH" # 或使用启动脚本(自动设置) ./start_training.sh ``` 4. **权限错误** ```bash # 解决方案:修改权限 chmod +x start_training.sh sudo chown -R $USER:$USER ./ ``` ### 日志分析 查看详细错误信息: ```bash # 查看最新日志 tail -f logs/training_$(ls logs/ | grep training | tail -1) # 搜索错误 grep -i error logs/training_*.log # 查看GPU使用情况 watch -n 1 nvidia-smi # 查看训练状态 python -c "from src.utils.monitor import TrainingMonitor; m=TrainingMonitor(); print(m.get_current_status())" ``` ### 开发调试 ```bash # 使用统一测试框架进行调试 python tests/test_runner.py --test all # 测试特定功能 python tests/test_runner.py --test identity # 测试身份解决方案 python tests/test_runner.py --test data_loader # 测试数据加载 python tests/test_runner.py --test inference # 测试推理功能 # 测试单个模块 python -c "from src.config import Config; print(Config.PROJECT_ROOT)" python -c "from src.data import DataDownloader; d=DataDownloader(); print('DataDownloader OK')" python -c "from src.model import SecurityModelTrainer; print('Trainer OK')" # 环境检查 python main.py --mode check ``` ### 代码结构说明 - **src/config/**: 配置管理,包含所有配置类 - **src/data/**: 数据处理,包含下载、处理、加载功能 - **src/model/**: 模型管理,包含下载、训练、推理功能 - **src/utils/**: 工具模块,包含日志、监控、环境检查 - **src/app.py**: 主应用程序,整合所有功能 ### 性能优化 1. **提高训练速度** - 使用SSD存储 - 增加系统内存 - 优化数据加载 2. **减少显存使用** - 启用梯度检查点 - 使用更小的模型 - 减少序列长度 ## 📞 技术支持 如果遇到问题,请按以下步骤排查: ### 基础检查 1. 系统要求是否满足 2. 依赖是否正确安装 3. 日志文件中的错误信息 4. GPU驱动和CUDA版本 ### 使用测试框架诊断 ```bash # 运行完整测试诊断 python tests/test_runner.py --test all # 针对性测试 python tests/test_runner.py --test identity # 身份问题 python tests/test_runner.py --test download # 下载问题 python tests/test_runner.py --test inference # 推理问题 ``` ### 常见问题 - **身份认知问题**: 参考 [身份解决方案指南](identity_solution_guide.md) - **测试相关问题**: 参考 [测试框架说明](tests/README.md) - **模型推理问题**: 检查Chat Template配置 - **训练问题**: 查看训练日志和监控信息 ## 📄 许可证 本项目由云霖网络安全实验室开发,仅供学习和研究使用,请遵守相关法律法规。相关软件著作权已经申请 ## 🔗 相关文档 - [身份解决方案指南](identity_solution_guide.md) - 详细的神机身份设置说明 - [测试框架说明](tests/README.md) - 统一测试框架使用指南 - [项目更新日志](CHANGELOG.md) - 版本更新记录(如有) ## 🏷️ 版本信息 - **当前版本**: v2.0.0 - **当前模型版本**: 基于Qwen2.5-1.5B - **身份系统**: 神机身份认知v1.0 - **测试框架**: 统一测试系统v1.0 --- **开始你的网络安全模型训练之旅!** 🚀🤖