记某人工智能网络安全应用测试活动

Jun 17, 2026 · 7790 字
AI

最近参加了某人工智能网络安全应用测试活动,活动提供了双卡 Ascend 910B,要求离线断网环境下完成安全系统的代码审计和渗透测试。思来想去打算使用 Qwen3.6 + Opencode 的方式来完成代码审计和渗透测试,下面是我的环境搭建过程。

配置环境

首先查看系统信息和 NPU 信息:

[root@hostname ~]# neofetch --off
root@hostname
-------------------------------
OS: openEuler 22.03 (LTS-SP4) aarch64
Host: KVM Virtual Machine virt-6.2
Kernel: 5.10.0-268.0.0.171.oe2203sp4.aarch64
Uptime: 3 days, 20 hours, 12 mins
Packages: 777 (rpm)
Shell: bash 5.1.8
Resolution: 1024x768
Terminal: /dev/pts/0
CPU: (44) @ 2.400GHz
GPU: 02:05.0 Virtio: Virtio GPU
Memory: 1500MiB / 385480MiB

[root@hostname ~]# npu-smi info
+------------------------------------------------------------------------------------------------+
| npu-smi 25.5.1 Version: 25.5.1                                                                 |
+---------------------------+---------------+----------------------------------------------------+
| NPU Name                  | Health        | Power(W) Temp(C) Hugepages-Usage(page)             |
| Chip                      | Bus-Id        | AICore(%) Memory-Usage(MB) HBM-Usage(MB)           |
+===========================+===============+====================================================+
| 4                         | 910B2         | OK      | 88.4     42           0 / 0              |
| 0                         | 0000:07:00.0  | 0       | 0                | 3202 / 65536          |
+===========================+===============+====================================================+
| 5                         | 910B2         | OK      | 86.2     41           0 / 0              |
| 0                         | 0000:08:00.0  | 0       | 0                | 3203 / 65536          |
+===========================+===============+====================================================+
+---------------------------+---------------+----------------------------------------------------+
| NPU Chip                  | Process id    | Process name | Process memory(MB)                  |
+===========================+===============+====================================================+
| No running processes found in NPU 4                                                            |
+===========================+===============+====================================================+
| No running processes found in NPU 5                                                            |
+===========================+===============+====================================================+

可以看到两张 Ascend 910B 卡都正常工作,接下来初始化数据盘:

[root@hostname ~]# fdisk -l
Disk /dev/vda: 445 GiB, 477815111680 bytes, 933232640 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 5C41065C-1B0B-4D88-A1B0-099219C70712
Device         Start      End   Sectors Size Type
/dev/vda1      2048     411647    409600 200M EFI System
/dev/vda2    411648   2508799   2097152   1G Linux filesystem
/dev/vda3    2508800   2512895     4096   2M BIOS boot
/dev/vda4    2512896 933230591 930717696 443.8G Linux LVM

Disk /dev/vdb: 512 GiB, 549755813888 bytes, 1073741824 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk /dev/mapper/vg_sys-lv_root: 355.04 GiB, 381216096256 bytes, 744562688 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

[root@hostname ~]# mkfs.ext4 /dev/vdb
mke2fs 1.46.4 (18-Aug-2021)
Discarding device blocks: done
Creating filesystem with 134217728 4k blocks and 33554432 inodes
Filesystem UUID: c374cecb-28bc-4be5-82b7-1576a028f299
Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000
Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done

[root@hostname ~]# mkdir /data

[root@hostname ~]# mount /dev/vdb /data

[root@hostname ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs      4.0M     0  4.0M   0% /dev
tmpfs        189G     0  189G   0% /dev/shm
tmpfs         76G  1.3M   76G   1% /run
tmpfs        4.0M     0  4.0M   0% /sys/fs/cgroup
/dev/mapper/vg_sys-lv_root  355G  7.9G  347G   3% /
tmpfs        189G     0  189G   0% /tmp
/dev/vda2    1014M  160M  855M  16% /boot
/dev/vda1     200M  6.5M  194M   4% /boot/efi
tmpfs         38G     0   38G   0% /run/user/0
/dev/vdb      503G   28K  478G   1% /data

完成之后就可以准备下载模型了,这里我们直接使用 Qwen3.6-35B-A3B 的基础模型版本:

pip install modelscope
modelscope download --model Qwen/Qwen3.6-35B-A3B --local-dir /data/models/Qwen3.6-35B-A3B

最后启动 vllm-ascend 插件版本,这里我已经配置好优化参数了。

docker run -d \
  --name vllm-ascend \
  --net=host \
  --shm-size=64g \
  --device /dev/davinci4 \
  --device /dev/davinci5 \
  --device /dev/davinci_manager \
  --device /dev/devmm_svm \
  --device /dev/hisi_hdc \
  -v /usr/local/dcmi:/usr/local/dcmi \
  -v /usr/local/Ascend/driver/tools/hccn_tool:/usr/local/Ascend/driver/tools/hccn_tool \
  -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
  -v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/ \
  -v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \
  -v /etc/ascend_install.info:/etc/ascend_install.info \
  -v /data:/data \
  quay.io/ascend/vllm-ascend:v0.21.0rc1-openeuler \
  vllm serve /data/models/Qwen3.6-35B-A3B \
  --served-model-name Qwen3.6-35B-A3B \
  --tensor-parallel-size 2 \
  --trust-remote-code \
  --max-model-len 65536 \
  --reasoning-parser qwen3 \
  --enable-auto-tool-choice \
  --tool-call-parser qwen3_coder \
  --speculative-config '{"method":"qwen3_next_mtp","num_speculative_tokens":2}'

其中:

  • --shm-size=64g 是指定共享内存大小,避免模型加载时出现内存不足的问题
  • --tensor-parallel-size 2 是指定张量并行的大小
  • --max-model-len 65536 是指定模型的上下文长度
  • --reasoning-parser qwen3 是指定推理解析器
  • --enable-auto-tool-choice 是启用自动工具选择
  • --tool-call-parser qwen3_coder 是指定工具调用解析器
  • --speculative-config '{"method":"qwen3_next_mtp","num_speculative_tokens":2}' 用于开启 MTP 推理模式,提升推理速度

启动后可以通过以下命令查看日志和进入容器进行交互:

# 查看日志
docker logs -f vllm-ascend
# 打开 vllm chat 交互
docker exec -it vllm-ascend vllm chat

配置 Agent

首先安装 nvm 和 Node.js,我们使用 Node.js 24 LTS 版本。

# 下载并安装 nvm:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
# 代替重启 shell
\. "$HOME/.nvm/nvm.sh"
# 下载并安装 Node.js:
nvm install 24
# 验证 Node.js 版本:
node -v # Should print "v24.17.0".
# 验证 npm 版本:
npm -v # Should print "11.13.0".

Codex

目前 vLLM 对 responses 的支持还是实验性功能,这里只是 Codex 的样例,最后我们选择的是下面的 Opencode 来完成 Agent 的配置。

npm install -g @openai/codex
cat > ~/.codex/config.toml <<EOL
model_provider = "custom"
model = "Qwen3.6-35B-A3B"

[model_providers.custom]
name = "custom"
wire_api = "responses"
base_url = "http://localhost:8000/v1"

[model_metadata.Qwen3.6-35B-A3B]
context_window = 65536
max_output_tokens = 16384
supports_streaming = true
supports_tool_calls = true
EOL

Opencode

npm i -g opencode-ai
cd /data/workspace
cat > opencode.json <<EOL
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "local": {
      "npm": "@ai-sdk/openai-compatible",
      "options": {
        "baseURL": "http://localhost:8000/v1"
      },
      "models": {
        "Qwen3.6-35B-A3B": {}
      }
    }
  }
}
EOL

下一步就可以爽爽安装各种 Skills、MCP 和插件了。

git clone https://gitcode.com/gh_mirrors/cv/cve-bin-tool.git

还有个 opencode-goal,在 opencode.json 中添加以下内容:

{
  "plugin": ["opencode-plugin-goal"]
}

粤ICP备2025414119号 粤公网安备44030002006951号

© 2026 Saurlax · Powered by Astro