ClearML 会话命令行界面
clearml-session
是一个功能,允许启动 JupyterLab、VS Code 和 SSH 会话,并在远程机器上执行代码,以更好地满足资源需求。此功能提供了本地链接,通过安全加密的 SSH 连接访问远程机器上的 JupyterLab 和 VS Code。默认情况下,JupyterLab 和 VS Code 远程会话分别使用端口 8878 和 8898。
先决条件
clearml
已安装并配置。详情请参阅 入门指南。- 至少有一个
clearml-agent
在远程主机上运行。详情请参见installation。 - 您的机器上已安装SSH客户端。要验证,请打开终端并执行
ssh
。如果您没有收到错误信息,那么您已经准备好了。
启动 ClearML 会话
-
安装
clearml-session
:pip install clearml-session
-
运行
clearml-session
:clearml-session
您可以添加标志来设置Docker镜像、远程SSH端口、JupyterLab/VS Code版本等。有关所有配置选项,请参见CLI选项。
clearml-session
创建一个新的 Task,该任务负责根据您在主机上的规格设置 SSH 和 JupyterLab/VS Code 环境。 -
按照
clearml-session
设置向导操作:Select the queue
- Choose the queue where the ClearML Session task will be enqueued. The agent assigned to this queue will set up and launch the remote server.Launch interactive session?
- Clicky
to launch the interactive session.
-
会话任务被排入选定的队列中,然后由ClearML代理拉取并执行它。代理会下载适当的IDE并启动它。
-
一旦代理完成交互式任务的初始设置,本地的
cleaml-session
通过SSH连接到主机,并通过SSH连接隧道化SSH和IDE。如果指定了Docker,IDE环境将在Docker内部运行。 -
CLI 输出远程 JupyterLab 和 VS Code 会话的访问链接:
Interactive session is running:
SSH: ssh root@localhost -p 8022 [password: <password>]
Jupyter Lab URL: http://localhost:8878/?token=<token>
VSCode server available at http://localhost:8898/请注意,链接指向的是
localhost
,因为与远程服务器本身的所有通信都是通过安全的SSH连接完成的。 点击Jupyter Lab或VScode链接,或者通过输入shell
进入SSH shell。 -
现在开始编写代码,就像你在目标机器上运行一样!
重新启动和关闭会话
如果clearml-session
在本地启动并且仍在远程机器上运行,您可以轻松地重新连接到它。
要重新连接到之前的会话,请执行clearml-session
而不带任何额外的标志,重新连接到现有会话的选项将会出现:
Connect to active session id=c7302b564aa945408aaa40ac5c69399c [Y]/n?
如果从本地机器启动了多个会话并且仍然处于活动状态,请选择所需的会话:
Active sessions:
0*] 2021-05-09 12:24:11 id=ed48fb83ad76430686b1abdbaa6eb1dd
1] 2021-05-09 12:06:48 id=009eb34abde74182a8be82f62af032ea
Connect to session [0-1] or 'N' to skip
要关闭远程会话,这将释放clearml-agent
并关闭CLI,请输入“Shutdown”。如果会话被关闭,则无法重新连接到它。
连接到现有会话
如果clearml-session
正在远程运行,您可以从任何机器继续处理该会话。
当clearml-session
启动时,它会在ClearML服务器中初始化一个具有唯一ID的任务。
连接到现有会话:
- 转到网页用户界面,找到交互式会话任务(默认情况下,它在“DevOps”项目中)。
- 点击任务页面标题中的
ID
按钮以复制唯一ID。 - 运行以下命令:
clearml-session --attach
。 - 点击输出的JupyterLab / VS Code链接,或直接连接到SSH会话
功能
在 Docker 中运行
要在Docker容器内运行会话,请使用--docker
标志并输入要在交互式会话中使用的docker镜像。
Kubernetes 支持
使用 ClearML k8s-glue,您可以直接在 Kubernetes pods 中启动 ClearML 会话。在 values.yaml
文件的 sessions
部分中设置 clearml-session
的网络和入口设置。
请确保设置以下值:
- 设置
portModeEnabled: true
以允许会话直接从 pod 运行 svcType
- 将服务类型设置为NodePort
或LoadBalancer
。请注意,如果设置为NodePort
,则必须将externalIP
设置为其中一个工作节点的IP。如果设置为LoadBalancer
,则需要在应用图表之前预先设置好负载均衡器和外部IP地址。externalIP
- 定义一个客户端将连接的外部IP地址。请注意,这个外部IP需要提前设置好。maxServices
- 代理将生成的最大会话数
例如:
# -- Sessions internal service configuration
sessions:
# -- Enable/Disable sessions portmode WARNING: only one Agent deployment can have this set to true
portModeEnabled: true
# -- specific annotations for session services
svcAnnotations: {}
# -- service type ("NodePort" or "ClusterIP" or "LoadBalancer")
svcType: "NodePort"
# -- External IP sessions clients can connect to
externalIP: 0.0.0.0
# -- starting range of exposed NodePorts
startingPort: 30000
# -- maximum number of NodePorts exposed
maxServices: 20
欲了解更多信息,请参阅Kubernetes。
安装要求
clearml-session
可以在设置远程环境时安装所需的 Python 包。
通过以下方式之一指定需求:
- 使用
--requirements
将requirement.txt
文件附加到命令中。 - 手动指定包使用
--packages "
(例如" --packages "keras" "clearml"
),它们将自动安装。
访问Git仓库
要远程访问git仓库,添加一个--git-credentials
标志并将其设置为true
,这样本地的.git-credentials
文件就会被发送到交互会话中。这对于在私有git仓库上工作时非常有用,它允许无缝克隆和跟踪git引用,包括未跟踪的更改。
将本地文件上传到远程会话
您可以通过指定路径将本地机器上的文件和目录上传到远程会话中,使用
--upload-files
。目录或文件的全部内容将被复制到您的远程
clearml-session
容器中的 ~/session-files/
目录下。
clearml-session --upload-files /mnt/data/stuff
您可以结合使用--store-workspace
选项上传您的文件,以便在本地开发机器和远程机器之间轻松移动工作负载,并保持工作空间的持久同步。请参阅存储和同步工作空间。
启动调试会话
您可以在远程交互会话中调试在ClearML系统中注册的先前执行的实验。
将任务的ID输入到clearml-session
中进行调试,然后clearml-session
会克隆实验的git仓库并在远程机器上复制环境。然后可以在JupyterLab / VS Code上交互式地执行和调试代码。
任务必须连接到git仓库,因为目前不支持单脚本调试。
- 在ClearML 网页界面中,找到需要调试的实验(任务)。
- 点击任务名称旁边的
ID
按钮,并复制唯一的ID。 - 输入以下命令:
clearml-session --debugging-session
- 点击 JupyterLab / VS Code 链接,或直接连接到 SSH 会话。
- 在 JupyterLab / VS Code 中,访问实验的仓库,位于
environment/task_repository
文件夹中。
存储和同步工作区
您可以使用--store-workspace
选项来存储和同步您的交互式会话工作区。clearml-session
在关闭时会自动创建整个工作区的快照,并在任何远程机器上的新会话中恢复。
通过添加--store-workspace
到命令行来指定远程工作区根文件夹。在远程会话容器中,将所有代码和数据放在
目录下。当会话关闭时,工作区文件夹将自动打包并存储在ClearML文件服务器上。
clearml-session --store-workspace ~/workspace
在你的下一次clearml-session
执行中,再次指定--store-workspace
,clearml-session
将获取之前的工作区快照并将其恢复到
中的新远程容器中。
clearml-session --store-workspace ~/workspace
要继续特定的会话并恢复其工作区,请使用--continue-session
指定会话ID:
clearml-session --continue-session <session_id> --store-workspace ~/workspace
命令行选项
Command line options | Description | Default value |
---|---|---|
--attach | Attach to running interactive session | Previous session |
--base-task-id | Pass the ID of a task that will become the base task, so the session will use its configurations | none or the previously entered base task |
--config-file | Specify a path to another configuration file for clearml-session to store its previous state | .clearml_session.json or previously entered configuration file |
--continue-session | Pass the session of a previous session to continue, restoring your workspace (see --store-workspace ) | none |
--debugging-session | Pass existing Task ID, create a copy of the experiment on a remote machine, and launch Jupyter/SSH for interactive access. Example --debugging-session <task_id> | none |
--disable-fingerprint-check | If set, bypass the remote SSH server fingerprint verification process | none |
--disable-session-cleanup | If True , previous interactive sessions are not deleted | false |
--disable-store-defaults | If set, do not store current setup as new default configuration | none |
--docker | Select the docker image to use in the interactive session | nvidia/cuda:11.6.2-runtime-ubuntu20.04 or previously used docker image |
--docker-args | Add additional arguments for the docker image to use in the interactive session | none or the previously used docker-args |
--force_dropbear | Force using dropbear instead of SSHd | none |
--git-credentials | If True , local .git-credentials file is sent to the interactive session. | false |
--init-script | Specify a BASH init script file to be executed when the interactive session is being set up | none or previously entered BASH script |
--jupyter-lab | Install a JupyterLab on interactive session | true |
--keepalive | If set, enables transparent proxy that keep sockets alive to maintain the connection to the remote resource | false - do not use transparent socket for mitigating connection drops |
--packages | Additional packages to add. Supports version numbers. Example: --packages torch==1.7 tqdm | Previously added packages. |
--password | Set your own SSH password for the interactive session | A randomly generated password or a previously used one |
--project | Set the project name to the interactive session task | DevOps |
--public-ip | If true , register the public IP of the remote machine (if you are running the session on a public cloud) | false - Session runs on the machine whose agent is executing the session |
--queue | Select the queue to launch the interactive session on | Previously used queue |
--queue-excluded-tag | The queue option list will exclude queues with specified tags. See the tags parameter in the queues.create API call | none |
--queue-include-tag | The queue option list will include only queues with specified tags. See the tags parameter in the queues.create API call | none |
--randomize | Generate a new random SSH password for the interactive session. Pass --randomize to create a random password for the current session. Pass --randomize always to generate a new random password for every session you start. | false |
--remote-gateway | Specify a gateway IP to pass to the interactive session, if an external address needs to be accessed | none |
--remote-ssh-port | Set the remote SSH server port, running on the agent's machine | 10022 |
--requirements | Specify requirements.txt file to install when setting the interactive session. | none or previously used requirements (can be overridden by calling --packages ) |
--session-name | Set the name of the interactive session Task | none |
--session-tags | Add tags to the interactive session for increased visibility | none |
--shell | Open the SSH session directly. Notice, quitting the SSH session will not shut down the remote session | none |
--shutdown , -S | Shut down an active session | Previous session |
--skip-docker-network | Don't pass the --network host flag to the Docker that is launching the remote session. See Networking using the host network | false |
--store-workspace | Upload/Restore remote workspace folder and extract it into the next session. Use with --continue-session to continue your previous work from your exact container state | none |
--upload-files | Specify local files/folders to upload to the remote session | none |
--user-folder | Specify the path for the session's remote base folder for the session | Home folder(~/ ) or previously entered user folder path |
--username | Set your own SSH username for the interactive session | root or a previously used username |
--verbose | Increase verbosity of logging | none |
--version | Display the clearml-session utility version | N/A |
--vscode-extensions | Install additional VSCode extensions and VSCode python extensions (example: ms-python.python,ms-python.black-formatter,ms-python.pylint,ms-python.flake8 ) | none |
--vscode-server | Install VSCode on interactive session | true |
--vscode-version | Set VSCode server (code-server) version, as well as VSCode python extension version <vscode:python-ext> (example: "3.7.4:2020.10.332292344") | 4.14.1:2023.12.0 |
--yes , -y | Automatic yes to prompts; assume "yes" as answer to all prompts and run non-interactively | N/A |