十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

如何用 Papermill 参数注入加速 machine-learning-for-trading 大型笔记本的运行

如何用 Papermill 参数注入加速 machine-learning-for-trading 大型笔记本的运行 如何用 Papermill 参数注入加速 machine-learning-for-trading 大型笔记本的运行【免费下载链接】machine-learning-for-tradingCode for Machine Learning for Trading, 3rd edition — from data sourcing to live execution.项目地址: https://gitcode.com/GitHub_Trending/ma/machine-learning-for-tradingmachine-learning-for-tradingML4T第 3 版的章节笔记本和 9 个案例研究按生产参数运行时数据量大、训练轮次多跑一次往往要数小时。项目内置了一套 Papermill 参数注入机制每个笔记本顶部的参数单元声明了生产默认值Papermill 在执行前注入一个覆盖单元把MAX_SYMBOLS、N_EPOCHS这类值降到小尺度让同一个笔记本在几分钟内跑完。整条代码路径始终不变没有if TEST:分支只是数据和迭代规模变小。本文给出从手动注入单个笔记本到通过 pytest 批量验证一章笔记本的完整操作路径以及如何让参数缩减只影响你自己的运行而不碰生产产物。前提条件均来自 docs/running-notebooks.md 与 tests/README.md已通过 uv 本地环境uv sync或 Dockerdocker compose up ml4t装好依赖。Papermill 本身已列入项目依赖pyproject.toml 中声明为papermill2.6不需要单独安装。所有命令从仓库根目录执行。数据加载器按工作目录解析data/在别的目录跑会把数据报成缺失。笔记本依赖的数据集已下载免费数据可用uv run python data/download_all.py --free-only否则笔记本会以DataNotFoundError停下。参数注入如何工作每个笔记本都有一个带标签的参数单元例如 11_ml_pipeline/01_ols_inference.py 中# %% tags[parameters] SEED 42 MAX_SYMBOLS 0 MAX_TRAIN_ROWS 0 VIF_MAX_ROWS 00表示不缩减生产规模。Papermill 执行时会在该单元之后插入一个注入单元只覆盖你指定的名字# Injected by Papermill MAX_SYMBOLS 15 N_EPOCHS 2笔记本后续代码只看到最终被覆盖后的值代码路径与生产运行完全一致。注意一个硬性规则注入的名字必须是笔记本在参数单元之后真正读取、且不会在读取前被重新赋值的变量否则覆盖不生效笔记本会按生产规模白跑。tests/test_pm_helpers.py会拒绝这类名字让构建变红而不是静默跑全量。手动对单个笔记本注入参数直接从仓库根目录用 CLI 执行.ipynb输出丢到/dev/null# 缩减参数运行输出丢弃到 /dev/null uv run papermill 11_ml_pipeline/01_ols_inference.ipynb /dev/null \ --cwd . -k python3 \ -p MAX_SYMBOLS 15 \ -p N_EPOCHS 2 # 或者保存执行后的笔记本便于检查注入结果 uv run papermill 11_ml_pipeline/01_ols_inference.ipynb /tmp/executed.ipynb \ --cwd . -k python3 \ -p MAX_SYMBOLS 15--cwd .设定笔记本的执行目录必须保留并且要在仓库根目录运行原因同上。-k python3指定 kernel。文档给出的示例在 OLS 笔记本上用了N_EPOCHS实际打开 01_ols_inference.py 可以看到它声明的可注入参数是SEED、MAX_SYMBOLS、MAX_TRAIN_ROWS、VIF_MAX_ROWS。-p后面的名字换成目标笔记本参数单元里真实声明的变量即可例如对 OLS 笔记本用-p MAX_TRAIN_ROWS 5000。执行后的/tmp/executed.ipynb里能看到 Papermill 生成的注入单元这是最直接的“参数确实生效”的检查方式。Docker 路径的读者在 Jupyter Lab 终端File → New → Terminal里去掉uv run前缀执行同样的命令容器内没有uv。用 pytest 批量验证文档推荐路径测试套件从 tests/overrides.yaml 读取每个笔记本的覆盖参数逐个通过 Papermill 执行。用-k过滤到你要跑的笔记本或章节# 跑某一章的全部笔记本 uv run pytest tests/test_chapter_notebooks.py -v -k 11_ml_pipeline # 跑单个笔记本 uv run pytest tests/test_chapter_notebooks.py -v -v -k 01_ols_inference 2/dev/null || \ uv run pytest tests/test_chapter_notebooks.py -v -k 01_ols_inference # 跑某个案例研究的全部笔记本 uv run pytest tests/test_chapter_notebooks.py -v -k etfs去掉上面为排版保留的冗余写法实际就是一条uv run pytest tests/test_chapter_notebooks.py -v -k 01_ols_inference。文档标注不加-k的全量运行uv run pytest tests/test_chapter_notebooks.py -v在缩减参数下约需 2 小时——这就是参数注入“跑全量但不等全量”的典型用法。Docker 路径对应命令为docker compose run --rm ml4t pytest tests/test_chapter_notebooks.py -v -k 01_timeganpytest 每个用例通过/失败、超时默认 300 秒就是直接的验证结果缩减参数后本该在数分钟内完成的笔记本如果失败或超时说明参数没有真正缩小负载或数据有问题而不是机器慢。让参数覆盖只影响你自己的运行tests/overrides.yaml 按笔记本路径键控字段含义见 tests/README.md11_ml_pipeline/01_ols_inference: timeout: 300 # 该笔记本最大允许秒数默认 300 parameters: # Papermill 参数覆盖 MAX_SYMBOLS: 10 MAX_TRAIN_ROWS: 5000 case_studies/etfs/07_gbm: timeout: 180 parameters: MAX_FOLDS: 2 MAX_SYMBOLS: 5要按自己的机器调整超时或参数值不要直接改overrides.yaml而是复制一份本地文件已被 gitignore测试运行器会优先读取它cp tests/overrides.yaml tests/overrides.local.yaml # 编辑 tests/overrides.local.yaml 中的 timeout 或 parameters输出隔离由ML4T_OUTPUT_DIR完成pytest 会自动设置它笔记本的写出get_output_dir()等和模型/扫描配置读取都会重定向到该目录测试运行不会覆盖已训练的模型、回测结果等生产产物。手动运行想复用这套隔离时目标目录必须已包含案例研究的config/和建模数据scripts/create_experiment.py负责构建这样的隔离副本对着一个空路径手工设置ML4T_OUTPUT_DIR会因为重定向后的配置缺失而失败。覆盖不生效时怎么排查按文档给出的机制参数覆盖无效只有两种原因都在 tests/README.md 中写明笔记本根本没有读这个名字值落进了一个无用变量有代码在读取前重新绑定了这个名字笔记本继续用自己的生产值。Papermill 本身不会报告这两种情况test_pm_helpers.py的门禁会在构建期拒绝无法到达笔记本的名字、指向不存在笔记本的键以及 YAML anchor。所以当你发现笔记本仍在按生产规模跑先确认-p的名字在该笔记本参数单元之后被读取再确认运行目录是仓库根。跑通一条-k过滤的 pytest 命令、在保存的 executed 笔记本里看到注入单元、用例在 timeout 内通过——这三点齐了参数注入加速这条路径就完整可用后续如果要做实验而不碰发布基线docs/running-notebooks.md 中“Experimenting Without Changing the Release Baseline”一节给出了create_experiment.py的完整用法。【免费下载链接】machine-learning-for-tradingCode for Machine Learning for Trading, 3rd edition — from data sourcing to live execution.项目地址: https://gitcode.com/GitHub_Trending/ma/machine-learning-for-trading创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表