File size: 2,576 Bytes
53c10a4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
from __future__ import annotations

from pathlib import Path

import yaml

RELEASE_ROOT = Path(__file__).resolve().parents[1]


def test_h20_environment_uses_the_pinned_cuda_stack() -> None:
    environment = yaml.safe_load((RELEASE_ROOT / "environment.yml").read_text(encoding="utf-8"))
    dependencies = set(environment["dependencies"])

    assert environment["name"] == "orarl"
    assert "python=3.11" in dependencies
    assert "cuda-toolkit=12.9" in dependencies
    assert "ffmpeg=7" in dependencies
    assert "conda-forge" in environment["channels"]

    installer = (RELEASE_ROOT / "scripts" / "create_conda_env.sh").read_text(encoding="utf-8")
    assert "https://download.pytorch.org/whl/cu129" in installer
    assert "torch==2.10.0+cu129" in installer
    assert "vllm==0.19.1" in installer
    assert "flash-attn==2.8.3" in installer
    assert "install_conda_runtime_hook.sh" in installer
    assert "--evaluation-only" in installer
    # A single checkout installs the trainer; no external runtime root remains.
    assert "--runtime-root" not in installer
    assert "ORARL_RUNTIME_ROOT" not in installer

    validator = (RELEASE_ROOT / "scripts" / "check_environment.py").read_text(
        encoding="utf-8"
    )
    assert '"verl.trainer.main"' in validator
    assert "--evaluation-only" in validator

    runtime_hook = (
        RELEASE_ROOT / "scripts" / "install_conda_runtime_hook.sh"
    ).read_text(encoding="utf-8")
    assert "activate.d/orarl-runtime.sh" in runtime_hook
    assert 'Path(sysconfig.get_path("purelib")) / "nvidia"' in runtime_hook


def test_runtime_requirements_match_the_released_qwen35_stack() -> None:
    requirements = {
        line
        for line in (RELEASE_ROOT / "requirements-cu129.txt")
        .read_text(encoding="utf-8")
        .splitlines()
        if line and not line.startswith("#")
    }

    assert "transformers==5.5.4" in requirements
    assert "qwen-vl-utils[decord]==0.0.14" in requirements
    assert "torchcodec==0.10.0" in requirements
    assert "ray[default]==2.54.0" in requirements
    assert "flash-linear-attention==0.4.2" in requirements

    evaluator = (
        RELEASE_ROOT / "eval" / "task" / "temporal_grounding" / "eval_timelens_hf.py"
    ).read_text(encoding="utf-8")
    assert 'setdefault("FORCE_QWENVL_VIDEO_READER", "decord")' in evaluator

    segmentation_evaluator = (
        RELEASE_ROOT / "eval" / "task" / "segmentation" / "eval_seg_vllm.py"
    ).read_text(encoding="utf-8")
    assert 'setdefault("FORCE_QWENVL_VIDEO_READER", "decord")' in segmentation_evaluator