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 作業會繼承當前活動的
conda
或virtualenv
,並在當前工作目錄中執行。這與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`` 個 副本
的日誌行。當所有符合條件的日誌行都被讀取後,迭代器就會結束。如果排程器支援基於時間的游標來擷取自訂時間範圍內的日誌行,則會採用
since
和until
欄位,否則會忽略它們。未指定since
和until
等同於取得所有可用的日誌行。如果until
為空,則迭代器的行為類似於tail -f
,會持續追蹤日誌輸出,直到作業達到終止狀態。日誌的確切定義因排程器而異。有些排程器可能會將 stderr 或 stdout 視為日誌,而其他排程器可能會從日誌檔案中讀取日誌。
行為和假設
如果在不存在的應用程式上呼叫,則會產生未定義的行為。呼叫者應在呼叫此方法之前,使用
exists(app_id)
檢查應用程式是否存在。不是狀態性的,使用相同的參數呼叫此方法兩次會傳回一個新的迭代器。先前的迭代進度會遺失。
不保證支援日誌追蹤。並非所有排程器都支援即時日誌迭代(例如,在應用程式執行時追蹤日誌)。迭代器的行為請參考特定排程器的說明文件。
- 3.1 如果排程器支援日誌追蹤,則應透過
should_tail
參數來控制。
不保證日誌保留。在呼叫此方法時,底層排程器可能已經清除此應用程式的日誌記錄。如果是這樣,此方法會引發任意例外狀況。
如果
should_tail
為 True,則此方法只會在可存取的日誌行已完全耗盡且應用程式已達到最終狀態時,才會引發StopIteration
例外狀況。例如,如果應用程式卡住且未產生任何日誌行,則迭代器會封鎖,直到應用程式最終被終止(透過逾時或手動),此時它會引發StopIteration
。如果
should_tail
為 False,則此方法會在沒有更多日誌時引發StopIteration
。並非所有排程器都需要支援。
某些排程器可以透過支援
__getitem__
來支援行游標(例如,iter[50]
會搜尋到第 50 個日誌行)。- 空格會被保留,每個新行都應該包含
\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 作業的參數。
- 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 腳本。