rexprun 0.1.66__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- rexprun-0.1.66/LICENSE +22 -0
- rexprun-0.1.66/MANIFEST.in +10 -0
- rexprun-0.1.66/PKG-INFO +121 -0
- rexprun-0.1.66/README.md +86 -0
- rexprun-0.1.66/pyproject.toml +59 -0
- rexprun-0.1.66/rexp/__init__.py +6 -0
- rexprun-0.1.66/rexp/__main__.py +29 -0
- rexprun-0.1.66/rexp/cli/__init__.py +2 -0
- rexprun-0.1.66/rexp/cli/main.py +1487 -0
- rexprun-0.1.66/rexp/cli/templates/ascend_smoke/README.md +23 -0
- rexprun-0.1.66/rexp/cli/templates/ascend_smoke/configs/smoke.yaml +16 -0
- rexprun-0.1.66/rexp/cli/templates/ascend_smoke/experiment/experiment.py +50 -0
- rexprun-0.1.66/rexp/cli/templates/default/README.md +62 -0
- rexprun-0.1.66/rexp/cli/templates/default/analysis/analyze.py +25 -0
- rexprun-0.1.66/rexp/cli/templates/default/configs/full.yaml +23 -0
- rexprun-0.1.66/rexp/cli/templates/default/configs/smoke.yaml +23 -0
- rexprun-0.1.66/rexp/cli/templates/default/evaluation/summarize.py +14 -0
- rexprun-0.1.66/rexp/cli/templates/default/experiment/README.md +28 -0
- rexprun-0.1.66/rexp/cli/templates/default/experiment/experiment.py +60 -0
- rexprun-0.1.66/rexp/cli/templates/default/experiment/experiment_helpers.py +34 -0
- rexprun-0.1.66/rexp/cli/templates/default/tests/test_experiment.py +17 -0
- rexprun-0.1.66/rexp/cli/templates/dlm_kv_staleness/README.md +27 -0
- rexprun-0.1.66/rexp/cli/templates/dlm_kv_staleness/configs/full.yaml +36 -0
- rexprun-0.1.66/rexp/cli/templates/dlm_kv_staleness/configs/smoke.yaml +36 -0
- rexprun-0.1.66/rexp/cli/templates/dlm_kv_staleness/evaluation/kv_error.py +10 -0
- rexprun-0.1.66/rexp/cli/templates/dlm_kv_staleness/experiment/kv_staleness.py +56 -0
- rexprun-0.1.66/rexp/cli/templates/ray_tune/README.md +41 -0
- rexprun-0.1.66/rexp/cli/templates/ray_tune/configs/smoke.yaml +27 -0
- rexprun-0.1.66/rexp/cli/templates/ray_tune/experiment/trainable.py +25 -0
- rexprun-0.1.66/rexp/core/__init__.py +2 -0
- rexprun-0.1.66/rexp/core/accelerators.py +64 -0
- rexprun-0.1.66/rexp/core/conda.py +35 -0
- rexprun-0.1.66/rexp/core/config.py +87 -0
- rexprun-0.1.66/rexp/core/machine.py +60 -0
- rexprun-0.1.66/rexp/core/paths.py +141 -0
- rexprun-0.1.66/rexp/core/process.py +76 -0
- rexprun-0.1.66/rexp/core/provenance.py +165 -0
- rexprun-0.1.66/rexp/core/resources.py +24 -0
- rexprun-0.1.66/rexp/core/run_lock.py +38 -0
- rexprun-0.1.66/rexp/core/schemas.py +220 -0
- rexprun-0.1.66/rexp/core/state_store.py +586 -0
- rexprun-0.1.66/rexp/core/states.py +38 -0
- rexprun-0.1.66/rexp/core/storage.py +161 -0
- rexprun-0.1.66/rexp/core/tuning.py +89 -0
- rexprun-0.1.66/rexp/datasets/__init__.py +6 -0
- rexprun-0.1.66/rexp/datasets/base.py +45 -0
- rexprun-0.1.66/rexp/datasets/huggingface.py +56 -0
- rexprun-0.1.66/rexp/datasets/local_jsonl.py +52 -0
- rexprun-0.1.66/rexp/docs/schemas.md +392 -0
- rexprun-0.1.66/rexp/docs//344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +592 -0
- rexprun-0.1.66/rexp/models/__init__.py +13 -0
- rexprun-0.1.66/rexp/models/base.py +69 -0
- rexprun-0.1.66/rexp/models/dream.py +17 -0
- rexprun-0.1.66/rexp/models/llada.py +59 -0
- rexprun-0.1.66/rexp/server/__init__.py +1 -0
- rexprun-0.1.66/rexp/server/analysis.py +19 -0
- rexprun-0.1.66/rexp/server/assets.py +494 -0
- rexprun-0.1.66/rexp/server/dependencies.py +196 -0
- rexprun-0.1.66/rexp/server/envprobe.py +100 -0
- rexprun-0.1.66/rexp/server/evaluation.py +26 -0
- rexprun-0.1.66/rexp/server/mcp.py +264 -0
- rexprun-0.1.66/rexp/server/node.py +177 -0
- rexprun-0.1.66/rexp/server/run_cleanup.py +143 -0
- rexprun-0.1.66/rexp/server/runner.py +198 -0
- rexprun-0.1.66/rexp/server/scheduler.py +693 -0
- rexprun-0.1.66/rexp/server/script_execution.py +66 -0
- rexprun-0.1.66/rexp/server/script_worker.py +35 -0
- rexprun-0.1.66/rexp/server/services.py +757 -0
- rexprun-0.1.66/rexp/server/setup.py +46 -0
- rexprun-0.1.66/rexp/server/trial_queue.py +47 -0
- rexprun-0.1.66/rexp/server/tuning.py +415 -0
- rexprun-0.1.66/rexp/skills/experiment-authoring/SKILL.md +453 -0
- rexprun-0.1.66/rexp/skills/platform-operations/SKILL.md +457 -0
- rexprun-0.1.66/rexp/version.py +1 -0
- rexprun-0.1.66/rexprun.egg-info/PKG-INFO +121 -0
- rexprun-0.1.66/rexprun.egg-info/SOURCES.txt +110 -0
- rexprun-0.1.66/rexprun.egg-info/dependency_links.txt +1 -0
- rexprun-0.1.66/rexprun.egg-info/entry_points.txt +2 -0
- rexprun-0.1.66/rexprun.egg-info/requires.txt +24 -0
- rexprun-0.1.66/rexprun.egg-info/top_level.txt +1 -0
- rexprun-0.1.66/setup.cfg +4 -0
- rexprun-0.1.66/tests/test_adapters.py +20 -0
- rexprun-0.1.66/tests/test_ascend.py +205 -0
- rexprun-0.1.66/tests/test_assets.py +289 -0
- rexprun-0.1.66/tests/test_bundled_resources.py +17 -0
- rexprun-0.1.66/tests/test_cli.py +249 -0
- rexprun-0.1.66/tests/test_command_audit.py +148 -0
- rexprun-0.1.66/tests/test_crash_recovery.py +44 -0
- rexprun-0.1.66/tests/test_env_selection.py +112 -0
- rexprun-0.1.66/tests/test_environment_catalog.py +149 -0
- rexprun-0.1.66/tests/test_experiment_loading.py +106 -0
- rexprun-0.1.66/tests/test_initial_setup.py +80 -0
- rexprun-0.1.66/tests/test_lifecycle.py +73 -0
- rexprun-0.1.66/tests/test_network_config.py +96 -0
- rexprun-0.1.66/tests/test_pause_resume.py +41 -0
- rexprun-0.1.66/tests/test_platform_info.py +194 -0
- rexprun-0.1.66/tests/test_plugin_interfaces.py +206 -0
- rexprun-0.1.66/tests/test_process_linux.py +62 -0
- rexprun-0.1.66/tests/test_project_deps.py +80 -0
- rexprun-0.1.66/tests/test_research_catalog.py +101 -0
- rexprun-0.1.66/tests/test_retry.py +65 -0
- rexprun-0.1.66/tests/test_run_cleanup.py +174 -0
- rexprun-0.1.66/tests/test_run_metadata.py +54 -0
- rexprun-0.1.66/tests/test_runs_limit.py +75 -0
- rexprun-0.1.66/tests/test_scheduler_checks.py +108 -0
- rexprun-0.1.66/tests/test_scheduler_gpu.py +214 -0
- rexprun-0.1.66/tests/test_script_environment.py +60 -0
- rexprun-0.1.66/tests/test_skills_bundled.py +47 -0
- rexprun-0.1.66/tests/test_startup_resume.py +114 -0
- rexprun-0.1.66/tests/test_storage.py +45 -0
- rexprun-0.1.66/tests/test_trial_queue.py +177 -0
- rexprun-0.1.66/tests/test_tuning.py +334 -0
rexprun-0.1.66/LICENSE
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 REXP contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Exclude personal/private documents from published distributions
|
|
2
|
+
exclude 提示词.md
|
|
3
|
+
exclude docs/环境问题记录.md
|
|
4
|
+
exclude .codex
|
|
5
|
+
exclude .agents
|
|
6
|
+
|
|
7
|
+
# Exclude caches and build leftovers from sdists
|
|
8
|
+
global-exclude __pycache__ *.py[cod]
|
|
9
|
+
recursive-exclude * __pycache__
|
|
10
|
+
exclude HANDOFF.md
|
rexprun-0.1.66/PKG-INFO
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: rexprun
|
|
3
|
+
Version: 0.1.66
|
|
4
|
+
Summary: Research Experiment Platform: a recoverable, reproducible experiment worker with SSH MCP integration.
|
|
5
|
+
Author: REXP contributors
|
|
6
|
+
License: MIT
|
|
7
|
+
Keywords: research,experiment,scheduler,mcp,agent,dlm
|
|
8
|
+
Classifier: Programming Language :: Python :: 3
|
|
9
|
+
Classifier: Operating System :: OS Independent
|
|
10
|
+
Requires-Python: >=3.10
|
|
11
|
+
Description-Content-Type: text/markdown
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
Requires-Dist: PyYAML>=6.0
|
|
14
|
+
Requires-Dist: pydantic>=2.0
|
|
15
|
+
Requires-Dist: typer>=0.12
|
|
16
|
+
Requires-Dist: rich>=13.0
|
|
17
|
+
Requires-Dist: mcp<2,>=1.0
|
|
18
|
+
Requires-Dist: packaging>=24
|
|
19
|
+
Provides-Extra: tune
|
|
20
|
+
Requires-Dist: ray[tune]<3,>=2.40; extra == "tune"
|
|
21
|
+
Requires-Dist: optuna<5,>=4; extra == "tune"
|
|
22
|
+
Provides-Extra: research
|
|
23
|
+
Requires-Dist: numpy; extra == "research"
|
|
24
|
+
Requires-Dist: torch; extra == "research"
|
|
25
|
+
Requires-Dist: transformers; extra == "research"
|
|
26
|
+
Requires-Dist: accelerate; extra == "research"
|
|
27
|
+
Requires-Dist: datasets; extra == "research"
|
|
28
|
+
Requires-Dist: huggingface_hub; extra == "research"
|
|
29
|
+
Requires-Dist: safetensors; extra == "research"
|
|
30
|
+
Requires-Dist: einops; extra == "research"
|
|
31
|
+
Requires-Dist: tqdm; extra == "research"
|
|
32
|
+
Provides-Extra: dev
|
|
33
|
+
Requires-Dist: pytest; extra == "dev"
|
|
34
|
+
Dynamic: license-file
|
|
35
|
+
|
|
36
|
+
# Research Experiment Platform (REXP)
|
|
37
|
+
|
|
38
|
+
REXP 是单节点、离线优先的实验 worker,负责项目、队列、调度、运行、检查点、评测、分析和结果存储。实验数据集中放在用户明确指定的 `PLATFORM_ROOT`。实验脚本由控制端准备,通过 SSH MCP 上传。
|
|
39
|
+
|
|
40
|
+
## 本分支:Handfree SSH MCP 控制端
|
|
41
|
+
|
|
42
|
+
Handfree SSH MCP 选择目标主机,REXP 插件通过同一条 SSH 连接调用该主机的 `rexp`,通过 SFTP 上传项目和取回结果。插件中的 `platformRoot` 是固定的数据根目录,`rexpPath` 是该主机的 `rexp` 程序位置;没有独立的 REXP 客户端包或 `rexp client` 命令。多台 SSH 主机沿用 Handfree 的 `connectionName`,各主机的路径保存在私人插件 registry 的 `connections.<SSH别名>` 中。
|
|
43
|
+
|
|
44
|
+
详见 [SSH MCP 接入说明](docs/ssh-mcp-integration.md) 和 [Agent 接入指南](docs/agent-mcp.md)。
|
|
45
|
+
|
|
46
|
+
## 被控端安装
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
pip install rexprun
|
|
50
|
+
rexp init --root /绝对路径/平台根目录 --yes
|
|
51
|
+
rexp node env add py312 --conda-env py312
|
|
52
|
+
rexp doctor
|
|
53
|
+
rexp node env list
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
`pip install` 会在所选 Python 环境注册 `rexp` 指令。平台运行环境无需 PyTorch;实验使用的 Python、PyTorch 和 CUDA 由 `rexp node env` 登记与检测。GPU 实验在配置里写 `environment: py312` 等已登记的环境名。
|
|
57
|
+
|
|
58
|
+
## 运行实验
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
rexp project create demo --version v1
|
|
62
|
+
rexp submit demo v1 --config /绝对路径/平台根目录/research/demo/v1/configs/smoke.yaml
|
|
63
|
+
rexp start # 前台运行调度器
|
|
64
|
+
rexp status
|
|
65
|
+
rexp queue
|
|
66
|
+
rexp runs
|
|
67
|
+
rexp run show run_001
|
|
68
|
+
rexp run logs run_001
|
|
69
|
+
rexp run eval run_001
|
|
70
|
+
rexp run analyze run_001
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
控制端通过通用 `plugin-list` / `plugin-activate` / `plugin-skill` 发现插件并获取当前版本说明,
|
|
74
|
+
然后用 `plugin-run` 执行 rexp 命令(args 不含 rexp)。上传项目和取回结果使用 SSH MCP 原有
|
|
75
|
+
SFTP 工具;传输前先查询平台事实,确认固定根目录。
|
|
76
|
+
|
|
77
|
+
## 服务端接口
|
|
78
|
+
|
|
79
|
+
- `rexp`:被控端本地命令,Handfree 插件通过 SSH 调用。
|
|
80
|
+
- `rexp mcp`:服务端本机的原生 MCP stdio 接口。
|
|
81
|
+
|
|
82
|
+
完整命令见 [使用说明书](docs/使用说明书.md),配置与数据结构见 [架构](docs/architecture.md) 和 [Schema](docs/schemas.md)。
|
|
83
|
+
|
|
84
|
+
## 昇腾 NPU(初步适配,待真卡验证)
|
|
85
|
+
|
|
86
|
+
支持读取 Linux `npu-smi` 整卡拓扑、检查实验环境的 `torch_npu` 能力,并按运行时逻辑卡号分卡。
|
|
87
|
+
实验配置增加 `resources.accelerator_backend: npu`;原 `gpu_count` / `min_vram_gb`
|
|
88
|
+
字段在 NPU 节点代表 NPU 数量 / 每卡显存,保留名称以兼容已有配置。
|
|
89
|
+
平台不自动安装驱动、CANN 或转换 CUDA 实验代码。实验自身需兼容昇腾 PyTorch。
|
|
90
|
+
|
|
91
|
+
用 `rexp project create ascend_check --version v1 --template ascend_smoke` 创建不下载模型的
|
|
92
|
+
真卡数值测试;详见生成项目的 README。当前本地测试验证探测解析与调度,不能代替真卡计算验证。
|
|
93
|
+
|
|
94
|
+
## 可选 Ray Tune 搜索
|
|
95
|
+
|
|
96
|
+
支持用一个平台 run 管理一轮参数搜索,父任务预留资源,内部 trial 分别运行。
|
|
97
|
+
`rexp project create search_demo --template ray_tune` 获取 CPU 示例,实验环境需安装 `rexprun[tune]`。
|
|
98
|
+
通过普通 `rexp submit` 提交,`rexp tune list` / `rexp tune show run_XXX` 查看结果。
|
|
99
|
+
支持 Random/Grid、Optuna TPE、FIFO/ASHA 与多目标 Pareto;GPU 搜索当前仅 CUDA。
|
|
100
|
+
完整预算、显卡分配、暂停恢复与存储约定见 [使用说明书](docs/使用说明书.md) 的 Ray Tune 章节。
|
|
101
|
+
|
|
102
|
+
## CLI 命名(0.1.66 起)
|
|
103
|
+
|
|
104
|
+
全局入口统一为 `rexp`;源码目录或指定解释器也可使用 `python -m rexp`。
|
|
105
|
+
按下方步骤迁移后只提供新入口,不再提供旧命令别名。发行包名为 `rexprun`,Python 导入名仍为 `rexp`。
|
|
106
|
+
SSH 插件使用 `rexpPath` 指向 Linux/macOS 的 `bin/rexp` 或 Windows 的 `Scripts/rexp.exe`。
|
|
107
|
+
修改命令名不改变平台根目录、`~/.rexp` 配置、环境注册或实验记录。
|
|
108
|
+
|
|
109
|
+
## 从旧测试包迁移
|
|
110
|
+
|
|
111
|
+
正式发行包名为 `rexprun`;`rexp-server` 是旧 TestPyPI 包。两者提供同一个 `rexp` Python 模块,
|
|
112
|
+
不要在同一环境中同时保留。正式包发布后,在平台所用 Python 环境先下载新版,再卸载旧包并安装:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
python -m pip download --no-deps --dest /已确认的安装包目录 'rexprun==0.1.66'
|
|
116
|
+
python -m pip uninstall rexp-server
|
|
117
|
+
python -m pip install /已确认的安装包目录/rexprun-0.1.66-py3-none-any.whl
|
|
118
|
+
rexp version
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
迁移前确认实验与调度器已停止;保留原平台根目录和实验环境,无需重新初始化。
|
rexprun-0.1.66/README.md
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Research Experiment Platform (REXP)
|
|
2
|
+
|
|
3
|
+
REXP 是单节点、离线优先的实验 worker,负责项目、队列、调度、运行、检查点、评测、分析和结果存储。实验数据集中放在用户明确指定的 `PLATFORM_ROOT`。实验脚本由控制端准备,通过 SSH MCP 上传。
|
|
4
|
+
|
|
5
|
+
## 本分支:Handfree SSH MCP 控制端
|
|
6
|
+
|
|
7
|
+
Handfree SSH MCP 选择目标主机,REXP 插件通过同一条 SSH 连接调用该主机的 `rexp`,通过 SFTP 上传项目和取回结果。插件中的 `platformRoot` 是固定的数据根目录,`rexpPath` 是该主机的 `rexp` 程序位置;没有独立的 REXP 客户端包或 `rexp client` 命令。多台 SSH 主机沿用 Handfree 的 `connectionName`,各主机的路径保存在私人插件 registry 的 `connections.<SSH别名>` 中。
|
|
8
|
+
|
|
9
|
+
详见 [SSH MCP 接入说明](docs/ssh-mcp-integration.md) 和 [Agent 接入指南](docs/agent-mcp.md)。
|
|
10
|
+
|
|
11
|
+
## 被控端安装
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
pip install rexprun
|
|
15
|
+
rexp init --root /绝对路径/平台根目录 --yes
|
|
16
|
+
rexp node env add py312 --conda-env py312
|
|
17
|
+
rexp doctor
|
|
18
|
+
rexp node env list
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
`pip install` 会在所选 Python 环境注册 `rexp` 指令。平台运行环境无需 PyTorch;实验使用的 Python、PyTorch 和 CUDA 由 `rexp node env` 登记与检测。GPU 实验在配置里写 `environment: py312` 等已登记的环境名。
|
|
22
|
+
|
|
23
|
+
## 运行实验
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
rexp project create demo --version v1
|
|
27
|
+
rexp submit demo v1 --config /绝对路径/平台根目录/research/demo/v1/configs/smoke.yaml
|
|
28
|
+
rexp start # 前台运行调度器
|
|
29
|
+
rexp status
|
|
30
|
+
rexp queue
|
|
31
|
+
rexp runs
|
|
32
|
+
rexp run show run_001
|
|
33
|
+
rexp run logs run_001
|
|
34
|
+
rexp run eval run_001
|
|
35
|
+
rexp run analyze run_001
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
控制端通过通用 `plugin-list` / `plugin-activate` / `plugin-skill` 发现插件并获取当前版本说明,
|
|
39
|
+
然后用 `plugin-run` 执行 rexp 命令(args 不含 rexp)。上传项目和取回结果使用 SSH MCP 原有
|
|
40
|
+
SFTP 工具;传输前先查询平台事实,确认固定根目录。
|
|
41
|
+
|
|
42
|
+
## 服务端接口
|
|
43
|
+
|
|
44
|
+
- `rexp`:被控端本地命令,Handfree 插件通过 SSH 调用。
|
|
45
|
+
- `rexp mcp`:服务端本机的原生 MCP stdio 接口。
|
|
46
|
+
|
|
47
|
+
完整命令见 [使用说明书](docs/使用说明书.md),配置与数据结构见 [架构](docs/architecture.md) 和 [Schema](docs/schemas.md)。
|
|
48
|
+
|
|
49
|
+
## 昇腾 NPU(初步适配,待真卡验证)
|
|
50
|
+
|
|
51
|
+
支持读取 Linux `npu-smi` 整卡拓扑、检查实验环境的 `torch_npu` 能力,并按运行时逻辑卡号分卡。
|
|
52
|
+
实验配置增加 `resources.accelerator_backend: npu`;原 `gpu_count` / `min_vram_gb`
|
|
53
|
+
字段在 NPU 节点代表 NPU 数量 / 每卡显存,保留名称以兼容已有配置。
|
|
54
|
+
平台不自动安装驱动、CANN 或转换 CUDA 实验代码。实验自身需兼容昇腾 PyTorch。
|
|
55
|
+
|
|
56
|
+
用 `rexp project create ascend_check --version v1 --template ascend_smoke` 创建不下载模型的
|
|
57
|
+
真卡数值测试;详见生成项目的 README。当前本地测试验证探测解析与调度,不能代替真卡计算验证。
|
|
58
|
+
|
|
59
|
+
## 可选 Ray Tune 搜索
|
|
60
|
+
|
|
61
|
+
支持用一个平台 run 管理一轮参数搜索,父任务预留资源,内部 trial 分别运行。
|
|
62
|
+
`rexp project create search_demo --template ray_tune` 获取 CPU 示例,实验环境需安装 `rexprun[tune]`。
|
|
63
|
+
通过普通 `rexp submit` 提交,`rexp tune list` / `rexp tune show run_XXX` 查看结果。
|
|
64
|
+
支持 Random/Grid、Optuna TPE、FIFO/ASHA 与多目标 Pareto;GPU 搜索当前仅 CUDA。
|
|
65
|
+
完整预算、显卡分配、暂停恢复与存储约定见 [使用说明书](docs/使用说明书.md) 的 Ray Tune 章节。
|
|
66
|
+
|
|
67
|
+
## CLI 命名(0.1.66 起)
|
|
68
|
+
|
|
69
|
+
全局入口统一为 `rexp`;源码目录或指定解释器也可使用 `python -m rexp`。
|
|
70
|
+
按下方步骤迁移后只提供新入口,不再提供旧命令别名。发行包名为 `rexprun`,Python 导入名仍为 `rexp`。
|
|
71
|
+
SSH 插件使用 `rexpPath` 指向 Linux/macOS 的 `bin/rexp` 或 Windows 的 `Scripts/rexp.exe`。
|
|
72
|
+
修改命令名不改变平台根目录、`~/.rexp` 配置、环境注册或实验记录。
|
|
73
|
+
|
|
74
|
+
## 从旧测试包迁移
|
|
75
|
+
|
|
76
|
+
正式发行包名为 `rexprun`;`rexp-server` 是旧 TestPyPI 包。两者提供同一个 `rexp` Python 模块,
|
|
77
|
+
不要在同一环境中同时保留。正式包发布后,在平台所用 Python 环境先下载新版,再卸载旧包并安装:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
python -m pip download --no-deps --dest /已确认的安装包目录 'rexprun==0.1.66'
|
|
81
|
+
python -m pip uninstall rexp-server
|
|
82
|
+
python -m pip install /已确认的安装包目录/rexprun-0.1.66-py3-none-any.whl
|
|
83
|
+
rexp version
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
迁移前确认实验与调度器已停止;保留原平台根目录和实验环境,无需重新初始化。
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "rexprun"
|
|
7
|
+
version = "0.1.66"
|
|
8
|
+
description = "Research Experiment Platform: a recoverable, reproducible experiment worker with SSH MCP integration."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.10"
|
|
11
|
+
license = {text = "MIT"}
|
|
12
|
+
authors = [{name = "REXP contributors"}]
|
|
13
|
+
keywords = ["research", "experiment", "scheduler", "mcp", "agent", "dlm"]
|
|
14
|
+
classifiers = [
|
|
15
|
+
"Programming Language :: Python :: 3",
|
|
16
|
+
"Operating System :: OS Independent",
|
|
17
|
+
]
|
|
18
|
+
dependencies = [
|
|
19
|
+
"PyYAML>=6.0",
|
|
20
|
+
"pydantic>=2.0",
|
|
21
|
+
"typer>=0.12",
|
|
22
|
+
"rich>=13.0",
|
|
23
|
+
"mcp>=1.0,<2",
|
|
24
|
+
"packaging>=24",
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
[project.optional-dependencies]
|
|
28
|
+
tune = ["ray[tune]>=2.40,<3", "optuna>=4,<5"]
|
|
29
|
+
research = [
|
|
30
|
+
"numpy",
|
|
31
|
+
"torch",
|
|
32
|
+
"transformers",
|
|
33
|
+
"accelerate",
|
|
34
|
+
"datasets",
|
|
35
|
+
"huggingface_hub",
|
|
36
|
+
"safetensors",
|
|
37
|
+
"einops",
|
|
38
|
+
"tqdm",
|
|
39
|
+
]
|
|
40
|
+
dev = ["pytest"]
|
|
41
|
+
|
|
42
|
+
[project.scripts]
|
|
43
|
+
rexp = "rexp.cli.main:main"
|
|
44
|
+
|
|
45
|
+
[tool.setuptools.packages.find]
|
|
46
|
+
include = ["rexp*"]
|
|
47
|
+
|
|
48
|
+
[tool.setuptools.package-data]
|
|
49
|
+
rexp = [
|
|
50
|
+
"cli/templates/**/*.py",
|
|
51
|
+
"cli/templates/**/*.yaml",
|
|
52
|
+
"cli/templates/**/*.md",
|
|
53
|
+
"cli/templates/**/*.txt",
|
|
54
|
+
"skills/**/*.md",
|
|
55
|
+
"docs/*.md",
|
|
56
|
+
]
|
|
57
|
+
|
|
58
|
+
[tool.pytest.ini_options]
|
|
59
|
+
testpaths = ["tests"]
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
"""Research Experiment Platform CLI entry point.
|
|
3
|
+
|
|
4
|
+
Usage:
|
|
5
|
+
python -m rexp <command> [options]
|
|
6
|
+
|
|
7
|
+
The interpreter used to run rexp itself needs the platform core dependencies
|
|
8
|
+
(pyyaml, pydantic, typer, rich). Experiments run in whatever environment is
|
|
9
|
+
configured on the node (e.g. llm-platform).
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
try:
|
|
13
|
+
from rexp.cli.main import main
|
|
14
|
+
except ModuleNotFoundError as exc:
|
|
15
|
+
if exc.name in ("typer", "pydantic", "yaml", "rich"):
|
|
16
|
+
print(
|
|
17
|
+
"REXP platform dependencies are missing in this Python environment "
|
|
18
|
+
f"(missing module: {exc.name}).\n"
|
|
19
|
+
"Install them first:\n"
|
|
20
|
+
" python -m pip install pyyaml pydantic typer rich\n"
|
|
21
|
+
"Then run this command again."
|
|
22
|
+
)
|
|
23
|
+
raise SystemExit(1)
|
|
24
|
+
raise
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
if __name__ == "__main__":
|
|
28
|
+
main()
|
|
29
|
+
|