Docker¶
- class torchx.schedulers.docker_scheduler.DockerScheduler(session_name: str)[來源]¶
基底:
DockerWorkspaceMixin
,Scheduler
[DockerOpts
]DockerScheduler 是一個 TorchX 排程介面,用於 Docker。
這是透過排程器 local_docker 公開的。
此排程器使用 AppDef 中指定的映像,透過本機 Docker 執行階段執行提供的應用程式。必須安裝並執行 Docker。這提供了最接近原生使用 Docker 的排程器的環境,例如 Kubernetes。
備註
Docker 不提供群組排程機制。如果作業中的一個複本失敗,則只會重新啟動該複本。
設定選項
usage: [copy_env=COPY_ENV],[env=ENV],[privileged=PRIVILEGED],[image_repo=IMAGE_REPO],[quiet=QUIET] optional arguments: copy_env=COPY_ENV (typing.List[str], None) list of glob patterns of environment variables to copy if not set in AppDef. Ex: FOO_* env=ENV (typing.Dict[str, str], None) environment variables to be passed to the run. The separator sign can be eiher comma or semicolon (e.g. ENV1:v1,ENV2:v2,ENV3:v3 or ENV1:V1;ENV2:V2). Environment variables from env will be applied on top of the ones from copy_env privileged=PRIVILEGED (bool, False) If true runs the container with elevated permissions. Equivalent to running with `docker run --privileged`. image_repo=IMAGE_REPO (str, None) (remote jobs) the image repository to use when pushing patched images, must have push access. Ex: example.com/your/container quiet=QUIET (bool, False) whether to suppress verbose output for image building. Defaults to ``False``.
掛載
此類別支援繫結掛載目錄和具名磁碟區。
繫結掛載:
type=bind,src=<主機 路徑>,dst=<容器 路徑>[,readonly]
具名磁碟區:
type=volume,src=<名稱>,dst=<容器 路徑>[,readonly]
裝置:
type=device,src=<名稱>[,dst=<容器 路徑>][,permissions=rwm]
如需更多資訊,請參閱
torchx.specs.parse_mounts()
。功能
排程器支援
擷取日誌
✔️
分散式作業
✔️
取消作業
✔️
描述作業
部分支援。DockerScheduler 將傳回作業和複本狀態,但不會提供完整的原始 AppSpec。
工作區 / 修補
✔️
掛載
✔️
彈性
❌
- 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 – 如果排程器不支援日誌迭代
- class torchx.schedulers.docker_scheduler.DockerJob(app_id: str, containers: List[torchx.schedulers.docker_scheduler.DockerContainer])[原始碼]¶
參考¶
- torchx.schedulers.docker_scheduler.create_scheduler(session_name: str, **kwargs: Any) DockerScheduler [原始碼]¶