Skip to main content

ClearML 会话命令行界面

clearml-session 是一个功能,允许启动 JupyterLab、VS Code 和 SSH 会话,并在远程机器上执行代码,以更好地满足资源需求。此功能提供了本地链接,通过安全加密的 SSH 连接访问远程机器上的 JupyterLab 和 VS Code。默认情况下,JupyterLab 和 VS Code 远程会话分别使用端口 8878 和 8898。

JupyterLab 会话


VS Code 会话

先决条件

  • clearml 已安装并配置。详情请参阅 入门指南
  • 至少有一个clearml-agent在远程主机上运行。详情请参见installation
  • 您的机器上已安装SSH客户端。要验证,请打开终端并执行ssh。如果您没有收到错误信息,那么您已经准备好了。

启动 ClearML 会话

  1. 安装 clearml-session:

    pip install clearml-session
  2. 运行 clearml-session

    clearml-session 

    您可以添加标志来设置Docker镜像、远程SSH端口、JupyterLab/VS Code版本等。有关所有配置选项,请参见CLI选项

    clearml-session 创建一个新的 Task,该任务负责根据您在主机上的规格设置 SSH 和 JupyterLab/VS Code 环境。

  3. 按照clearml-session设置向导操作:

    1. 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.
    2. Launch interactive session? - Click y to launch the interactive session.
  4. 会话任务被排入选定的队列中,然后由ClearML代理拉取并执行它。代理会下载适当的IDE并启动它。

  5. 一旦代理完成交互式任务的初始设置,本地的cleaml-session通过SSH连接到主机,并通过SSH连接隧道化SSH和IDE。如果指定了Docker,IDE环境将在Docker内部运行。

  6. 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。

  7. 现在开始编写代码,就像你在目标机器上运行一样!

重新启动和关闭会话

如果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的任务。

连接到现有会话:

  1. 转到网页用户界面,找到交互式会话任务(默认情况下,它在“DevOps”项目中)。
  2. 点击任务页面标题中的ID按钮以复制唯一ID。
  3. 运行以下命令:clearml-session --attach
  4. 点击输出的JupyterLab / VS Code链接,或直接连接到SSH会话

功能

在 Docker 中运行

要在Docker容器内运行会话,请使用--docker标志并输入要在交互式会话中使用的docker镜像。

Kubernetes 支持

使用 ClearML k8s-glue,您可以直接在 Kubernetes pods 中启动 ClearML 会话。在 values.yaml 文件的 sessions 部分中设置 clearml-session 的网络和入口设置。

请确保设置以下值:

  • 设置 portModeEnabled: true 以允许会话直接从 pod 运行
  • svcType - 将服务类型设置为NodePortLoadBalancer。请注意,如果设置为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上交互式地执行和调试代码。

note

任务必须连接到git仓库,因为目前不支持单脚本调试。

  1. ClearML 网页界面中,找到需要调试的实验(任务)。
  2. 点击任务名称旁边的ID按钮,并复制唯一的ID。
  3. 输入以下命令:clearml-session --debugging-session
  4. 点击 JupyterLab / VS Code 链接,或直接连接到 SSH 会话。
  5. 在 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 optionsDescriptionDefault value
--attachAttach to running interactive sessionPrevious session
--base-task-idPass the ID of a task that will become the base task, so the session will use its configurationsnone or the previously entered base task
--config-fileSpecify a path to another configuration file for clearml-session to store its previous state.clearml_session.json or previously entered configuration file
--continue-sessionPass the session of a previous session to continue, restoring your workspace (see --store-workspace)none
--debugging-sessionPass 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-checkIf set, bypass the remote SSH server fingerprint verification processnone
--disable-session-cleanupIf True, previous interactive sessions are not deletedfalse
--disable-store-defaultsIf set, do not store current setup as new default configurationnone
--dockerSelect the docker image to use in the interactive sessionnvidia/cuda:11.6.2-runtime-ubuntu20.04 or previously used docker image
--docker-argsAdd additional arguments for the docker image to use in the interactive sessionnone or the previously used docker-args
--force_dropbearForce using dropbear instead of SSHdnone
--git-credentialsIf True, local .git-credentials file is sent to the interactive session.false
--init-scriptSpecify a BASH init script file to be executed when the interactive session is being set upnone or previously entered BASH script
--jupyter-labInstall a JupyterLab on interactive sessiontrue
--keepaliveIf set, enables transparent proxy that keep sockets alive to maintain the connection to the remote resourcefalse - do not use transparent socket for mitigating connection drops
--packagesAdditional packages to add. Supports version numbers. Example: --packages torch==1.7 tqdmPreviously added packages.
--passwordSet your own SSH password for the interactive sessionA randomly generated password or a previously used one
--projectSet the project name to the interactive session taskDevOps
--public-ipIf 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
--queueSelect the queue to launch the interactive session onPreviously used queue
--queue-excluded-tagThe queue option list will exclude queues with specified tags. See the tags parameter in the queues.create API callnone
--queue-include-tagThe queue option list will include only queues with specified tags. See the tags parameter in the queues.create API callnone
--randomizeGenerate 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-gatewaySpecify a gateway IP to pass to the interactive session, if an external address needs to be accessednone
--remote-ssh-portSet the remote SSH server port, running on the agent's machine10022
--requirementsSpecify requirements.txt file to install when setting the interactive session.none or previously used requirements (can be overridden by calling --packages)
--session-nameSet the name of the interactive session Tasknone
--session-tagsAdd tags to the interactive session for increased visibilitynone
--shellOpen the SSH session directly. Notice, quitting the SSH session will not shut down the remote sessionnone
--shutdown, -SShut down an active sessionPrevious session
--skip-docker-networkDon't pass the --network host flag to the Docker that is launching the remote session. See Networking using the host networkfalse
--store-workspaceUpload/Restore remote workspace folder and extract it into the next session. Use with --continue-session to continue your previous work from your exact container statenone
--upload-filesSpecify local files/folders to upload to the remote sessionnone
--user-folderSpecify the path for the session's remote base folder for the sessionHome folder(~/) or previously entered user folder path
--usernameSet your own SSH username for the interactive sessionroot or a previously used username
--verboseIncrease verbosity of loggingnone
--versionDisplay the clearml-session utility versionN/A
--vscode-extensionsInstall additional VSCode extensions and VSCode python extensions (example: ms-python.python,ms-python.black-formatter,ms-python.pylint,ms-python.flake8)none
--vscode-serverInstall VSCode on interactive sessiontrue
--vscode-versionSet 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, -yAutomatic yes to prompts; assume "yes" as answer to all prompts and run non-interactivelyN/A