news 2026/7/17 7:08:34

02.Windows环境Docker部署April-AE

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
02.Windows环境Docker部署April-AE

一、项目介绍

1.1 仓库地址

  • GIT URL: https://github.com/Joe-zsc/April-AE.git

1.2 项目说明

  • 用强化学习+动作嵌入(SBERT)训练“自治渗透测试”智能体,在大规模动作空间中学习高效的扫描/利用策略(对应论文 APRIL)。
    我们应该看到的“结果”
  • 训练过程曲线与指标:奖励、成功率、步数、覆盖率等(TensorBoard 中查看)。
  • 学到的渗透策略:给定环境,智能体能按更少步骤、更高成功率达成目标(成功利用/拿到 flag)。
  • 最优动作序列(渗透路径):每回合的具体操作序列,可用于复现与报告。
    训练后的结果“在哪里”
  • 训练日志与曲线:runs/(TensorBoard 可视化)。
  • 动作向量缓存:actions/Action-/Embedding-.npy(只是加速用的缓存,不是训练产物)。
  • 预训练文本嵌入模型(SBERT):NLP_Module/Embedding_models/…(onnx 是预训练模型导出,不是你的RL训练结果)。
  • 强化学习策略权重(需要你显式保存):April-AE-actor.pt / critic_.pt 以及 statenorm.pt(保存到你指定目录,例如 log/checkpoints/)。

二、Docker镜像构建

2.1 准备工作

  • requirements.txt调整
    原来requirementstorch的版本是。
    annoy==1.17.3# numpy==1.19.5 这个版本要升级numpy==1.26.4#pandas==2.2.3 这个版本要升级pandas==2.3.1scikit_learn==1.4.1.post1sentence_transformers==2.5.1torch==2.5.1tqdm==4.66.2
  • Linux安装软件包(windows需要单独安装git客户端)
    sudoapt-getupdate&&sudoapt-getinstall-ygitgit-lfs&&gitlfsinstall
  • 下载模型
    • git拉取(linux和windows)
      模型地址在https://huggingface.co/sentence-transformers/all-MiniLM-L12-v2/tree/main此处,但由于网络不稳定,只能下载到个人服务器中专一次。
      如果网络允许,可以直接git拉取:

      gitclone https://huggingface.co/sentence-transformers/all-MiniLM-L12-v2\./NLP_Module/Embedding_models/all-MiniLM-L12-v2
    • linux(git不能拉取的情况)

      cdNLP_Module/Embedding_modelswgethttp://118.25.230.32:9000/all-MiniLM-L12-v2.tar.gztar-zxvfall-MiniLM-L12-v2.tar.gz ```
    • Windows(git不能拉取的情况)
      Windows直接通过浏览器下载http://118.25.230.32:9000/all-MiniLM-L12-v2.tar.gz该模型文件到April-AE/ 目录解压即可。

  • 修改配置文件config.ini
    修改NLP_Module\Embedding_modelsNLP_Module/Embedding_models
    [common] log_path = log actions_file = Action-1000 project_name = April-AE [Embedding] embedding_models=NLP_Module/Embedding_models sbert_model = all-MiniLM-L12-v2

2.2 制作Dockerfile

# 基础镜像 FROM python:3.11-slim # 防止 Python 缓冲标准输出/错误 ENV PYTHONUNBUFFERED=1 \ PIP_NO_CACHE_DIR=1 \ PYTHONDONTWRITEBYTECODE=1 # 切换 APT 源为国内镜像并安装系统依赖(兼容新旧 Debian,带重试与 fix-missing) ARG DEBIAN_MIRROR=https://mirrors.tuna.tsinghua.edu.cn/debian ARG DEBIAN_SECURITY_MIRROR=https://mirrors.tuna.tsinghua.edu.cn/debian-security RUN set -eux; \ if [ -f /etc/apt/sources.list ]; then \ sed -i "s|http://deb.debian.org/debian|${DEBIAN_MIRROR}|g; s|http://security.debian.org/debian-security|${DEBIAN_SECURITY_MIRROR}|g" /etc/apt/sources.list; \ elif [ -f /etc/apt/sources.list.d/debian.sources ]; then \ sed -i "s|URIs: http://deb.debian.org/debian|URIs: ${DEBIAN_MIRROR}|g" /etc/apt/sources.list.d/debian.sources || true; \ sed -i "s|URIs: http://security.debian.org/debian-security|URIs: ${DEBIAN_SECURITY_MIRROR}|g" /etc/apt/sources.list.d/debian.sources || true; \ else \ printf 'deb %s stable main contrib non-free non-free-firmware\n' "${DEBIAN_MIRROR}" > /etc/apt/sources.list; \ printf 'deb %s stable-updates main contrib non-free non-free-firmware\n' "${DEBIAN_MIRROR}" >> /etc/apt/sources.list; \ printf 'deb %s stable-security main contrib non-free non-free-firmware\n' "${DEBIAN_SECURITY_MIRROR}" >> /etc/apt/sources.list; \ fi; \ apt-get -o Acquire::Retries=5 update; \ apt-get install -y --no-install-recommends \ build-essential \ git \ curl \ ca-certificates \ || (apt-get -o Acquire::Retries=5 update --fix-missing && apt-get install -y --no-install-recommends build-essential git curl ca-certificates); \ rm -rf /var/lib/apt/lists/* # 工作目录 WORKDIR /app # 仅先拷贝 requirements 以利用分层缓存 COPY requirements.txt /app/requirements.txt # 使用官方 pip 命令安装 PyTorch(CPU 版本) # 注意:torchaudio 2.5.1 可能在某些索引中不可用,使用更宽松的版本约束 #RUN python -m pip install --upgrade pip \ # && pip install --no-cache-dir torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 #--index-url https://download.pytorch.org/whl/cpu # 使用官方 pip 命令安装 PyTorch(GPU 版本) RUN python -m pip install --upgrade pip \ && pip install --no-cache-dir torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 --index-url https://download.pytorch.org/whl/cu118 # 安装其他 Python 依赖(排除 torch 相关包) RUN awk '!/^torch==/' requirements.txt > /tmp/requirements.no_torch.txt \ && pip install --no-cache-dir -r /tmp/requirements.no_torch.txt \ && pip install --no-cache-dir tensorboard # 拷贝项目其余文件 COPY . /app # 为模型、日志与运行结果声明挂载点 VOLUME ["/app/NLP_Module/Embedding_models", "/app/log", "/app/runs"] # 暴露 README 中的 TensorBoard 端口 EXPOSE 6666 # 默认可配置参数 ARG ENV_FILE=single/env-CVE-2018-11776.json ARG AGENT=April-AE ARG GPU=-1 # 支持在运行时通过环境变量覆盖 ENV ENV_FILE=${ENV_FILE} \ AGENT=${AGENT} \ GPU=${GPU} # 启动命令:按 README 运行训练;在 Linux 中使用 POSIX 路径 CMD ["/bin/sh", "-lc", "python April.py --env_file \"$ENV_FILE\" --agent \"$AGENT\" --gpu \"$GPU\""]

2.3 构建镜像

注意:需要把/home/kali换位实际的地址。

  • linux版本
cd/home/kali/April-AEdockerbuild-tapril-ae:latest.# 或者# docker build -t april-ae:latest /home/kali/April-AE
  • Windows版本
cd D:/workspace/April-AE docker build -t april-ae:latest . # 或者 # docker build -t april-ae:latest D:/workspace/April-AE

2.3 运行模型

  • Linux版本
    需要把/home/kali/改为实际的地址。
    dockerrun--rm-it\-v/home/kali/April-AE/NLP_Module/Embedding_models:/app/NLP_Module/Embedding_models\-v/home/kali/April-AE/log:/app/log\-v/home/kali/April-AE/runs:/app/runs\-eAGENT=April-AE\april-ae:latest

  • Windows版本
    docker run --rm -it -v D:/workspace/April-AE/NLP_Module/Embedding_models:/app/NLP_Module/Embedding_models -v D:/workspace/April-AE/log:/app/log -v D:/workspace/April-AE/runs:/app/runs -e AGENT=April-AE april-ae:latest

其他命令:

  • 指定不同环境文件或 agent(保持 POSIX 路径)
dockerrun--rm-it\-vD:/workspace/April-AE/NLP_Module/Embedding_models:/app/NLP_Module/Embedding_models\-vD:/workspace/April-AE/log:/app/log\-vD:/workspace/April-AE/runs:/app/runs\-eENV_FILE=single/env-CVE-2019-9193.json\-eAGENT=April-AE\-eGPU=-1\--nameapril-ae\april-ae:latest
  • 启动 tensorboard(映射 6666 端口)
    实时可视化(单独起一个 TensorBoard 容器,训练容器退出也能看历史),访问一定要改为:http://127.0.0.1:6006。
dockerrun--rm-it\-v/mnt/d/workspace/April-AE/runs:/app/runs\-p6006:6666\--entrypointbash\april-ae:latest-lc"tensorboard --logdir runs --host 0.0.0.0 --port 6666"
dockerrun--rm-it-vd:\workspace\April-AE\runs:/app/runs-p6006:6666--entrypointbashapril-ae:latest-lc"tensorboard --logdir runs --host 0.0.0.0 --port 6666"
  • GPU 训练(推荐分离训练与可视化)
    在wsl中,执行下面命令使用GPU加速。
dockerrun--rm-it--gpusall\-v/mnt/d/workspace/April-AE/NLP_Module/Embedding_models:/app/NLP_Module/Embedding_models\-v/mnt/d/workspace/April-AE/log:/app/log\-v/mnt/d/workspace/April-AE/runs:/app/runs\-eAGENT=April-AE\-eGPU=0\--nameapril-ae\april-ae:latest

  • 如果希望训练完容器不立即退出(不推荐,一般没必要)
    • 前台常驻:在容器里追加一个阻塞命令
docker run --gpus all -d \ -v /mnt/d/workspace/April-AE/NLP_Module/Embedding_models:/app/NLP_Module/Embedding_models \ -v /mnt/d/workspace/April-AE/log:/app/log \ -v /mnt/d/workspace/April-AE/runs:/app/runs \ -e AGENT=April-AE -e GPU=0 \ --name april-ae-train-bg \ april-ae:latest \ bash -lc "python April.py --env_file \"$ENV_FILE\" --agent \"$AGENT\" --gpu \"$GPU\"; tail -f /dev/null" - 或者把 TensorBoard和训练同容器内并行跑(训练结束 tensorboard 仍在) docker run --gpus all -d \ -v /mnt/d/workspace/April-AE/NLP_Module/Embedding_models:/app/NLP_Module/Embedding_models \ -v /mnt/d/workspace/April-AE/log:/app/log \ -v /mnt/d/workspace/April-AE/runs:/app/runs \ -p 6666:6666 \ -e AGENT=April-AE -e GPU=0 \ --name april-ae-train-and-tb \ april-ae:latest \ bash -lc "python April.py --env_file \"$ENV_FILE\" --agent \"$AGENT\" --gpu \"$GPU\" & tensorboard --logdir runs --host 0.0.0.0 --port 6666; wait"

三、使用方式

defload(self,path):ifself.use_state_norm:self.state_norm=Normalization(shape=StateEncoder.state_space# shape=StateEncoder.state_space, finetune=True)mean_checkpoint=path/f"state_norm_mean.pt"std_checkpoint=path/f"state_norm_std.pt"mean=torch.load(mean_checkpoint)std=torch.load(std_checkpoint)self.state_norm.running_ms.mean=mean self.state_norm.running_ms.std=std self.state_norm.running_ms.S=std*std self.Policy.load(path)self.is_loaded_agent=True
dockerrun--rm-it-vD:\workspace\April-AE\log:/app/log-vD:\workspace\April-AE\NLP_Module\Embedding_models:/app/NLP_Module/Embedding_models-eCKPT_TITLE="April-AE-Sep24_15-57-50-single/env-CVE-2019-9193"-eEVAL_ENV="single/env-CVE-2019-9193.json"--entrypointbashapril-ae:latest-lc"python evaluate.py"


四、总结

  • 训练

april-ae提供很多种场景(scenarios),在scenarios\single目录有很多配置项,我们这里是拿env-CVE-2019-9193.json这个场景为例训练的模型。如果需要训练其他场景,修改下面命令中ENV_FILE的值即可:

dockerrun--rm-it--gpusall-vD:/workspace/April-AE/NLP_Module/Embedding_models:/app/NLP_Module/Embedding_models-vD:/workspace/April-AE/log:/app/log-vD:/workspace/April-AE/runs:/app/runs-eENV_FILE=single/env-CVE-2019-9193.json-eAGENT=April-AE-eGPU=0--nameapril-ae april-ae:latest

模型训练结束之后,在log/checkpoints目录下会生成模型结果,比如:

/April-AE-Sep24_15-57-50-single/April-AE-actor.pt /April-AE-Sep24_15-57-50-single/env-CVE-2019-9193/April-AE-critic_1.pt /April-AE-Sep24_15-57-50-single/env-CVE-2019-9193/April-AE-critic_2.pt /April-AE-Sep24_15-57-50-single/env-CVE-2019-9193/state_norm_mean.pt /April-AE-Sep24_15-57-50-single/env-CVE-2019-9193/state_norm_std.pt

这些结果,我们会在模型评估中用到。

  • 评估

模型评估阶段,我们会调用evaluate.py对模型结果做评估验证,传入的参数中,我们需要修改CKPT_TITLE的值为上面的/April-AE-Sep24_15-57-50-single/env-CVE-2019-9193文件夹的相对路径。EVAL_ENV的值为场景值,即与模型训练阶段的传值保持一致ingle/env-CVE-2019-9193.json

dockerrun--rm-it-vD:\workspace\April-AE\log:/app/log-vD:\workspace\April-AE\NLP_Module\Embedding_models:/app/NLP_Module/Embedding_models-eCKPT_TITLE="April-AE-Sep24_15-57-50-single/env-CVE-2019-9193"-eEVAL_ENV="single/env-CVE-2019-9193.json"--entrypointbashapril-ae:latest-lc"python evaluate.py"

运行后我们得到结果:

--Running April-AE agent-- eval_return=915, steps=6, success_rate=1.0
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/17 7:08:32

游戏AI开发实战:有限状态机(FSM)核心原理与工程实现

1. 项目概述:为什么有限状态机是游戏AI的“定海神针”?聊到游戏AI,很多刚入行的朋友可能会立刻想到那些高大上的神经网络、深度学习,觉得不搞点机器学习都不好意思说自己在做AI。但说实话,在绝大多数商业游戏项目里&am…

作者头像 李华
网站建设 2026/7/17 7:08:14

Redis---string类型

redis中的字符串,直接按照二进制方式存储的,不会做任何编码转换,存的是什么,取出来还是什么所以可以存储: 文本数据,整数,普通字符串,JSON,xml,图片&#xff…

作者头像 李华
网站建设 2026/7/17 7:07:16

WS51单片机ISP下载速度优化:从9.6kbps提升至25.6kbps实战

如果你正在使用WS51系列单片机进行开发,可能会遇到一个共同的痛点:ISP下载速度太慢。传统的ISP下载程序往往只有几kbps的速度,每次烧录程序都需要等待几十秒甚至几分钟,这在快速迭代的开发过程中简直是噩梦。 但今天我要分享的经…

作者头像 李华
网站建设 2026/7/17 7:05:10

苹果M7芯片AI战略解析:从架构升级到开发者适配

1. 苹果芯片战略转向:从M6到AI驱动的M7彭博社最新爆料显示,苹果正在对其Mac芯片路线图进行重大调整。根据知名科技记者马克古尔曼的消息,苹果将跳过原计划的M6 Pro和M6 Max芯片,直接转向开发以AI为核心设计的M7系列。这个决定反映…

作者头像 李华
网站建设 2026/7/17 7:03:40

Dell服务器安装Win10无法识别NVMe SSD的解决方案

1. 问题背景与现象分析最近在给一台Dell PowerEdge R740服务器安装Windows 10系统时遇到了一个棘手问题:系统安装程序无法识别到已安装的NVMe固态硬盘。这个现象在服务器和工作站环境中并不罕见,特别是在使用较新型号的NVMe SSD时。具体表现为&#xff1…

作者头像 李华
网站建设 2026/7/17 7:03:37

Windows 11读书笔记1.2.1:版本、版本号与OS Build

🔥 个人主页: 杨利杰YJlio ❄️ 个人专栏: 《Windows 疑难杂症与工单复盘案例库》 《Sysinternals实战教程》 《WINDOWS教程》 《Windows PowerShell 实战》 《IOS插件分析测试》 《超简单:用Python让Excel飞起来》…

作者头像 李华