将您自己的LLM集成到EA中(第2部分):环境部署示例·进阶篇
「给 WSL2 挪盘与掐内存」
系统盘吃紧时,把 WSL2 子系统迁到别的盘能省出不少空间。先在命令提示符跑 wsl -l -v --all 看清要搬的发行版名字,再 wsl --shutdown 全关掉,用 wsl --export ubuntu f:\wsl-ubuntu.tar 打成压缩包,然后 wsl --unregister ubuntu 注销原实例,最后 wsl --import new_ubuntu F:\wsl\ubunto_wsl F:\wsl-ubuntu.tar --version 2 导入到新路径。导出的 tar 包留着就是备份,不要也能直接删。
全局配置文件锁在 C:\Users\<UserName>\.wslconfig,动它之前必须确认子系统已 shutdown,否则参数不生效。核心就三行:memory=8GB 给子系统封顶内存,swap=60GB 补磁盘级虚拟内存(0 即不要 swap),swapfile=G:\wsl\swap\wsl-swap.vhdx 指定交换文件落点。末尾不加标点,路径按自己盘符改。
跑 LLM 时有个硬约束:内存加交换的总和得大于模型体积,不然读权重的阶段就会报错。比如 7B 半精度模型常占 4~5GB,配 8GB 内存加 60GB 交换就稳,但只给 4GB 内存零 swap 必崩。
老 Windows 10(1903 以上、内部版 18362.1049+)要手开虚拟机平台:管理员 PowerShell 跑 dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart,装完内核 msi 包再 wsl --set-default-version 2,随后商店装发行版。删了缓存却发现 vhdx 不缩小时,用管理员权限进 diskpart 拿 vdisk 命令压缩虚拟硬盘才真正回收空间。
WSL 命令行参数怎么用才不绕路
在 MT5 之外的分析环境里,很多人用 WSL 跑 Python 或 Linux 工具做行情预处理。wsl.exe 本身不带命令行参数时,会直接进默认 shell;想跳过 shell 直跑程序,用 -e 后接命令最干净,比如 wsl -e python3 strat.py 不会加载交互环境,启动更快。
--cd 控制工作目录,写 ~ 走 Linux 用户主路径,以 / 开头当绝对 Linux 路径,其余必须给绝对 Windows 路径。配合 -d 指定发行版、-u 换用户,能在多发行版机器上精准隔离任务,避免把脚本跑错容器。
管理类参数里,--shutdown 会立刻杀掉所有发行版和 WSL2 轻量虚拟机,释放被占用的内存;--status 直接看子系统状态,排错时先敲这个比盲目重启省事。导入导出用 --export <Distro> <FileName> 和 --import,加 --vhd 可转 .vhdx 格式,方便把整套环境拷到另一台跑 MT5 的 Windows 上复用。
--list -v 能列出全部发行版详细信息,包含版本与运行状态;--set-version <Distro> <Version> 可改指定发行版内核版本,老发行版跑新文件系统工具报错时,这条比重装快。
◍ 在 WSL2 里把 LLM 跑起来的环境搭建
想在 MT5 之外用本地大模型辅助做价格行为分析,WSL2 是最省事的隔离环境。先用 miniconda 管 Python 包:wget 拉下 Miniconda3-latest-Linux-x86_64.sh,chmod 777 提权后执行安装,装完命令行前端多出「(base)」即生效。
代码编辑器不用另装,WSL2 命令行直接敲 code,会自动拉起 vscode 并连上子系统,左下角显示 WSL 字样。用 cd 切到策略代码目录再打 code,编辑器直接定位该文件夹,改 EA 或脚本很顺手。
N 卡加速两条路:Docker 方式跑 curl https://get.docker.com | sh 起服务,再装 nvidia-docker2,用 docker run --gpus all ... 进 CUDA 容器;手动方式下 cuda_12.2.2_535.104.05_linux.run,装完往 ~/.bashrc 塞三行环境变量(见代码块)。没显卡也别急,llama-cpp-python 纯 CPU 推理只是慢,不是不能用。
建个 conda 虚拟环境 conda create -n llm python=3.10,激活后 git lfs 开大文件支持,clone 下 Phind-CodeLlama-34B-v2 这类 gguf 模型。装 llama-cpp-python 时带 CMAKE_ARGS="-DLLAMA_CUBLAS=on" 才能调 GPU。test.py 里 max_tokens=32 跑太阳系问答,返回 usage 显示 total_tokens=42,说明本地推理链路通了。
class="kw">export PATH=/usr/local/cuda-class="num">12.2.class="num">2/bin${PATH:+:${PATH}} class="kw">export LD_LIBRARY_PATH=/usr/local/cuda-class="num">12.2.class="num">2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} class="kw">export CUDA_HOME=/usr/local/cuda-class="num">12.2.class="num">2${CUDA_HOME:+:${CUDA_HOME}} { "id": "cmpl-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "object": "text_completion", "created": class="num">1679561337, "model": "./models/7B/llama-model.gguf", "choices": [ { "text": "Q: Name the planets in the solar system? A: Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune and Pluto.", "index": class="num">0, "logprobs": None, "finish_reason": "stop" } ], "usage": { "prompt_tokens": class="num">14, "completion_tokens": class="num">28, "total_tokens": class="num">42 } }
「下一步选型的落点」
这套 WSL2 加 llama.cpp 的链路已经跑通,最小代码量就能在本地完成一次 LLM 推理,延迟和显存占用都可控。对做算法交易的读者来说,环境本身不是终点,模型能不能贴合 EA 的上下文才是关键。 下一阶段重心会转到模型选型:从一堆可用权重里挑出适合塞进交易逻辑的那个,而不是盲目追参数规模。外汇与贵金属波动受事件驱动明显,本地推理仅降低调用成本,不消除策略失效的高风险。 你现在就可以在 WSL2 里复现一遍推理示例,确认 llama.cpp 在你显卡上的 tokens/s,作为后续选型的基础参照。