跳转到正文

准备启动清单

启动清单集中记录“要运行什么、依赖什么、怎样才算成功”,用于填写任务、请求部署参数和核对验收结果。它不是 RLark CRD,也不是可直接运行的 RLinf 配方;模板中的占位符不能提交到控制台。

第一次使用 RLark 时,请选择规模较小且不访问真实机器人或其他物理执行器的工作负载。真实机器人任务需要另外完成安全条件检查

完成启动清单

先填写工作负载信息,再请求平台管理员补充与部署环境有关的参数:

  1. 填写应用、各角色镜像、拓扑、资源需求、配置、挂载方式和验收标准,把状态设为 DRAFT_FOR_PROFILE
  2. 使用这份草案请求已验证的部署参数,取得环境、集群、全局节点匹配、资源、存储和网络检查结果。
  3. 把管理员返回的内容填入 deployment_binding,重新核对各角色副本和路径,并完成任务、平台和必要的安全确认。
  4. 所有必填项都确认后,把状态改为 READY_TO_SUBMIT,再打开创建向导。

DRAFT_FOR_PROFILE 状态不能用于创建 Job

代码提交、各角色不可变镜像、配置记录方式、持久化输出或 checkpoint、成功与失败标准填写完整后,才能把草案发给管理员。部署参数、全局节点匹配和 Header 单副本没有确认前,清单不能改为 READY_TO_SUBMIT

复制启动清单模板

复制下面的模板到受版本控制的运行记录中并填写。只记录非敏感信息和 Secret 的引用名称;不要写入密码、令牌、私钥、对象存储密钥或镜像仓库凭据。

yaml
manifest:
  revision: "<required: immutable record revision>"
  status: "DRAFT_FOR_PROFILE" # DRAFT_FOR_PROFILE or READY_TO_SUBMIT

run_identity:
  run_id: "<required: unique run identifier>"
  workload_owner: "<required: team or role>"
  technical_reviewer: "<required: reviewer>"
  change_or_experiment_ref: "<required: ticket, experiment, or review URL>"
  target_environment_hint: "<optional: requested environment, or admin-to-recommend>"
  scope: "<required: non-device smoke run>"

source:
  repository: "<required: RLinf upstream or fork URL>"
  commit: "<required: full commit SHA>"
  patch_refs: []
  expected_versions:
    rlinf: "<required>"
    python: "<required>"
    ray: "<required>"
    cuda: "<required or not-applicable>"
    nccl: "<required or not-applicable>"

configuration:
  base_config_refs: ["<required: repository path@commit>"]
  cli_overrides: []
  environment_inputs: []
  precedence_note: "<required: how base config, overrides, and environment combine>"
  resolved_config_artifact: "<required: output path or artifact URL produced at runtime>"
  resolved_config_hash_method: "<required: deterministic hash command or method>"

roles:
  - name: "<required: UI role name>"
    rlinf_process_role: "<required: workload responsibility>"
    rlark_task_role: "<required: Actor, Rollout, or Env>"
    header: "<required: true or false>"
    intended_replicas: "<required: workload requirement, before deployment matching>"
    placement_requirements:
      node_category_or_hardware: "<required>"
      gpu_per_pod: "<required: integer, including 0>"
      device_resources: []
      cpu_memory_or_shm_requirements: "<required or not-applicable>"
      locality_or_network_requirements: "<required or not-applicable>"
    image:
      immutable_reference: "<required: registry/repository@sha256:digest>"
      build_record: "<required: CI/build provenance URL>"
      runtime_user: "<required: non-secret user name or UID>"
      required_commands: ["bash", "ray", "python"]
      python_imports: ["ray"]
    prepare_script_ref: "<required: repository path@commit or reviewed inline block>"
    non_secret_environment:
      - name: "<optional variable name>"
        value_or_source: "<reviewed non-secret value or source>"
    mounts:
      - purpose: "<input, config, checkpoint, output, or logs>"
        source_requirement: "<dataset/object/managed storage/host locality requirement>"
        container_path: "<required absolute path>"
        access: "<read-only or read-write>"
        persistence: "<required: lifetime and retention expectation>"

runtime:
  run_script_ref: "<required: repository path@commit or reviewed inline block>"
  expected_total_ranks_or_workers: "<required>"
  workload_selected_network_interfaces: []
  domain_required: "<required: true or false>"
  ssh_required: "<required: true or false>"
  tensorboard_directory: "<optional: container path>"

data_and_persistence:
  inputs:
    - location: "<required: approved non-secret path or dataset ID>"
      version_or_checksum: "<required>"
      access: "<required: read-only or read-write>"
  output_location: "<required: unique persistent path or object prefix>"
  checkpoint_location: "<required: persistent path or object prefix>"
  overwrite_policy: "<required: refuse, resume, or replace after approval>"
  retention_owner: "<required: team or role>"

acceptance:
  runtime_bootstrap_signals: ["<required: exact log or health signal>"]
  application_progress_signals: ["<required: workload-emitted signal>"]
  persistent_artifacts: ["<required: file/object and validation method>"]
  maximum_wait: "<required: reviewed duration>"
  failure_or_stop_signals: ["<required: exact signal and response owner>"]

operations:
  stop_owner: "<required: person, team, or on-call role>"
  stop_action: "<required: approved RLark or external-system action>"
  external_side_effects_to_check: ["<required or not-applicable>"]
  information_to_preserve_before_stop: ["<required>"]
  recovery_or_resume_plan: "<required: checkpoint-based plan or not-applicable>"
  cleanup_owner_and_scope: "<required: Job, temporary access, files, and retention boundary>"

# 工作负载草案保持 UNBOUND;收到已确认的部署参数后再填写。
deployment_binding:
  status: "UNBOUND" # UNBOUND or APPROVED
  profile_ref: "<fill after administrator response>"
  profile_revision: "<fill after administrator response>"
  profile_expires_at: "<fill after administrator response>"
  environment: "<fill after administrator response>"
  rlark_version_or_commit: "<fill after administrator response>"
  roles:
    - name: "<must match roles[].name>"
      cluster: "<approved cluster>"
      node_selector:
        "<admin-verified label key>": "<admin-verified single value>"
      matched_nodes: ["<admin-reported Node and namespace>"]
      global_match_count: "<admin-reported count; Header must be 1>"
      approved_gpu_per_pod: "<approved integer>"
      approved_device_resources: []
      approved_mount_sources: ["<StorageClass or verified per-node hostPath fact>"]
  domain: "<approved name or not-applicable>"
  secret_injection_path: "<approved mechanism name or not-applicable>"
  support_contact: "<team or role>"

review:
  workload_draft_review: "<required before profile request: reviewer, result, time>"
  platform_profile_review: "<fill after profile response: reviewer, result, time>"
  safety_review: "<approved, rejected, or not-applicable with reason>"
  final_submit_review: "<fill only after binding: reviewer, result, time>"

请结合管理员返回的目标部署信息确认 runtime.workload_selected_network_interfaces。平台不会自动填写 RLINF_COMM_NET_DEVICES 等通信配置;无法确认接口名时保持未绑定状态,不要猜测。

提交给管理员前检查

只有以下各项全部满足,才把草案交给管理员:

草案通过后,向管理员获取已验证的部署参数

创建任务前检查

管理员回复后,把部署参数记录和各角色的结果填入 deployment_binding,再逐项确认:

全部通过后,更新清单 revision,把 manifest.status 设为 READY_TO_SUBMIT,继续在 RLark 上运行 RLinf 任务。RLark 与 RLinf 的分工见RLark 与 RLinf