捷徑

Slurm

這包含 TorchX Slurm 排程器,可用於在 Slurm 叢集上執行 TorchX 元件。

類別 torchx.schedulers.slurm_scheduler.SlurmScheduler(session_name: str)[原始碼]

基底: DirWorkspaceMixin, Scheduler[SlurmOpts]

SlurmScheduler 是一個用於 slurm 的 TorchX 排程介面。TorchX 預期 slurm CLI 工具已在本機安裝,並且已啟用作業記帳。

每個應用程式定義都使用 sbatch 透過異構作業進行排程。每個角色的每個複本都有一個生成的唯一 Shell 腳本,其中包含其資源分配和參數,然後使用 sbatch 將它們全部一起啟動。

日誌可以透過 torchx log(程式設計 API)以組合形式取得,也可以在作業啟動目錄中以 slurm-<jobid>-<role>-<replica_id>.out 的形式取得。如果 TorchX 執行在與建立作業不同的目錄中,則將找不到日誌。

傳遞給它的某些配置選項會作為 SBATCH 參數添加到每個複本。有關參數的資訊,請參閱 https://slurm.schedmd.com/sbatch.html#SECTION_OPTIONS

Slurm 作業會繼承當前活動的 condavirtualenv,並在當前工作目錄中執行。這與 local_cwd 排程器的行為相符。

如需更多資訊,請參閱

$ torchx run --scheduler slurm utils.echo --msg hello
slurm://torchx_user/1234
$ torchx status slurm://torchx_user/1234
$ less slurm-1234.out
...

配置選項

    usage:
        [partition=PARTITION],[time=TIME],[comment=COMMENT],[constraint=CONSTRAINT],[mail-user=MAIL-USER],[mail-type=MAIL-TYPE],[job_dir=JOB_DIR]

    optional arguments:
        partition=PARTITION (str, None)
            The partition to run the job in.
        time=TIME (str, None)
            The maximum time the job is allowed to run for. Formats:             "minutes", "minutes:seconds", "hours:minutes:seconds", "days-hours",             "days-hours:minutes" or "days-hours:minutes:seconds"
        comment=COMMENT (str, None)
            Comment to set on the slurm job.
        constraint=CONSTRAINT (str, None)
            Constraint to use for the slurm job.
        mail-user=MAIL-USER (str, None)
            User to mail on job end.
        mail-type=MAIL-TYPE (str, None)
            What events to mail users on.
        job_dir=JOB_DIR (str, None)
            The directory to place the job code and outputs. The
            directory must not exist and will be created. To enable log
            iteration, jobs will be tracked in ``.torchxslurmjobdirs``.
            

相容性

功能

排程器支援

擷取日誌

✔️

分散式作業

✔️

取消作業

✔️

描述作業

部分支援。SlurmScheduler 會傳回作業和複本狀態,但不會提供完整的原始 AppSpec。

工作區 / 修補

如果指定了 ``job_dir``,則 DirWorkspaceMixin 將建立一個新的隔離目錄,其中包含工作區的快照。

掛載

彈性

如果分割區配置的 RealMemory 小於 1GB,我們會停用記憶體請求,以解決 https://github.com/aws/aws-parallelcluster/issues/2198 的問題。

describe(app_id: str) Optional[DescribeAppResponse][原始碼]

描述指定的應用程式。

傳回值:

AppDef 描述,如果應用程式不存在,則傳回 None

list() List[ListAppResponse][原始碼]

針對在排程器上啟動的應用程式,此 API 會傳回 ListAppResponse 物件清單,每個物件都包含應用程式 ID 及其狀態。注意:此 API 處於原型階段,可能會有所變更。

log_iter(app_id: str, role_name: str, k: int = 0, regex: Optional[str] = None, since: Optional[datetime] = None, until: Optional[datetime] = None, should_tail: bool = False, streams: Optional[Stream] = None) Iterable[str][原始碼]

傳回一個迭代器,指向 ``role`` ``k`` 副本 的日誌行。當所有符合條件的日誌行都被讀取後,迭代器就會結束。

如果排程器支援基於時間的游標來擷取自訂時間範圍內的日誌行,則會採用 sinceuntil 欄位,否則會忽略它們。未指定 sinceuntil 等同於取得所有可用的日誌行。如果 until 為空,則迭代器的行為類似於 tail -f,會持續追蹤日誌輸出,直到作業達到終止狀態。

日誌的確切定義因排程器而異。有些排程器可能會將 stderr 或 stdout 視為日誌,而其他排程器可能會從日誌檔案中讀取日誌。

行為和假設

  1. 如果在不存在的應用程式上呼叫,則會產生未定義的行為。呼叫者應在呼叫此方法之前,使用 exists(app_id) 檢查應用程式是否存在。

  2. 不是狀態性的,使用相同的參數呼叫此方法兩次會傳回一個新的迭代器。先前的迭代進度會遺失。

  3. 不保證支援日誌追蹤。並非所有排程器都支援即時日誌迭代(例如,在應用程式執行時追蹤日誌)。迭代器的行為請參考特定排程器的說明文件。

3.1 如果排程器支援日誌追蹤,則應透過

should_tail 參數來控制。

  1. 不保證日誌保留。在呼叫此方法時,底層排程器可能已經清除此應用程式的日誌記錄。如果是這樣,此方法會引發任意例外狀況。

  2. 如果 should_tail 為 True,則此方法只會在可存取的日誌行已完全耗盡且應用程式已達到最終狀態時,才會引發 StopIteration 例外狀況。例如,如果應用程式卡住且未產生任何日誌行,則迭代器會封鎖,直到應用程式最終被終止(透過逾時或手動),此時它會引發 StopIteration

    如果 should_tail 為 False,則此方法會在沒有更多日誌時引發 StopIteration

  3. 並非所有排程器都需要支援。

  4. 某些排程器可以透過支援 __getitem__ 來支援行游標(例如,iter[50] 會搜尋到第 50 個日誌行)。

  5. 空格會被保留,每個新行都應該包含 \n。為了

    支援互動式進度條,傳回的行不需要包含 \n,但應該在沒有換行的情況下列印,以便正確處理 \r 歸位字元。

參數

streams – 要選擇的 IO 輸出串流。選項有:combined、stdout、stderr。如果排程器不支援所選的串流,它將會丟出 ValueError。

傳回值:

指定角色副本的日誌行的 Iterator

引發

NotImplementedError – 如果排程器不支援日誌迭代

schedule(dryrun_info: AppDryRunInfo[SlurmBatchRequest]) str[原始碼]

submit 相同,但它會採用 AppDryRunInfo。建議實作者實作此方法,而不是直接實作 submit,因為 submit 可以透過

dryrun_info = self.submit_dryrun(app, cfg)
return schedule(dryrun_info)
torchx.schedulers.slurm_scheduler.create_scheduler(session_name: str, **kwargs: Any) SlurmScheduler[原始碼]
class torchx.schedulers.slurm_scheduler.SlurmBatchRequest(cmd: List[str], replicas: Dict[str, SlurmReplicaRequest], job_dir: Optional[str], max_retries: int)[原始碼]

保存用於透過 sbatch 啟動 slurm 作業的參數。

materialize() str[原始碼]

materialize 返回腳本的內容,該腳本可以傳遞給 sbatch 來運行作業。

class torchx.schedulers.slurm_scheduler.SlurmReplicaRequest(name: str, entrypoint: str, args: List[str], srun_opts: Dict[str, str], sbatch_opts: Dict[str, Optional[str]], env: Dict[str, str])[原始碼]

保存運行在 slurm 上的單個副本的參數,並且可以具體化為 bash 腳本。

classmethod from_role(name: str, role: Role, cfg: SlurmOpts, nomem: bool) SlurmReplicaRequest[原始碼]

from_role 為特定角色和名稱創建一個 SlurmReplicaRequest。

materialize() Tuple[List[str], List[str]][原始碼]

materialize 返回此角色的 sbatch 和 srun 組。根據 slurm 異構組,它們應該使用 : 組合。

文件

訪問 PyTorch 的全面開發者文檔

查看文檔

教程

獲取針對初學者和高級開發者的深入教程

查看教程

資源

尋找開發資源並獲得您的問題的解答

查看資源