GenStudio LLM API 部分模型价格调整公告GenStudio LLM API 部分模型价格调整公告 ,新价格 2025 年 11 月 1 日生效调价公告
Skip to content

开发机启动命令

为开发机指定「启动命令」字段,让开发机在启动时自动执行特定命令,实现自定义初始化、环境验证或自动化任务。

超时限制

为了确保容器实例的快速就绪和平台稳定性,我们为自定义启动命令设置了 3 分钟的超时限制。

  • 开发机启动命令最多可执行 3 分钟。超过该时长,系统将强制终止该命令进程。
  • 开发机启动命令的目标是执行启动自动化或快速初始化任务,不宜执行长时训练或下载操作。任何耗时不可预测的任务都可能失败。
  • 若您希望执行的程序在后台持续运行(如 Jupyter、VS Code Server 等),请使用 nohup、tmux 或在命令末尾添加 & 来后台启动 。

注意

无论是否使用开发机自定义启动命令,平台都会忽略镜像中定义的 Entrypoint 或 Command。

使用场景说明

  • 推荐(低风险)

    • 使用 nohuptmux 启动已安装的服务
    • 执行轻量级的、秒级可完成的初始化脚本(如创建目录、设置环境变量)。
    • 运行快速的环境检查(如 nvidia-smi)。
  • 不推荐(高风险)

    • apt install ... / yum install ...
    • pip install -r requirements.txt / conda env create ...
    • git clone https://... (克隆大型仓库或包含 LFS 文件的仓库)
    • python download_dataset.py (下载大型数据集)
    • 原因:这些操作的耗时严重依赖于网络速度和文件大小,极易超过 3 分钟限制,导致环境配置不完整或失败。
  • 不支持

    • 由于用户自定义启动命令在 Docker 服务启动之前执行,因此并不支持在启动命令执行 「Docker 容器功能」相关操作。

注意

  • 请勿使用开发机自定义启动命令来安装环境。利用类似 nohup pip install & 命令绕开超时限制,有可能造成僵尸进程风险,后果自负。
  • 推荐使用 Dockerfile 中将所有的依赖(aptpipconda 包,以及代码等)预先构建到您的自定义镜像中。然后,仅使用自定义启动命令来启动那些已安装的服务。
  • 开发机启动后,平台会尝试自动安装 docker cli 客户端、jq、bash、openssh-server、runit、sudo、shadow-utils,无需自行安装。

使用示例

启动后台常驻服务

如果需要启动 Jupyter Lab 这类需要长时间运行的服务,可以借助使用 nohup ... &tmux 或其他进程管理工具 让启动命令本身立即退出,而让它启动的服务进入后台

例如,使用 nohup 启动 Jupyter Lab,并在启动命令退出后让它继续运行。

bash
/bin/bash -c "nohup jupyter lab --ip=0.0.0.0 --port=8888 &"

另一个实例,在 conda 环境中启动 Jupyter:

bash
tmux new -d 'conda activate dev_env && jupyter notebook'

注意

如果遇到问题,请确保您要使用的工具或启动的服务(如 jupyter, tmux已预先安装在镜像中

快速验证与轻量级初始化

检查 GPU 可用性,在容器启动时运行快速的冒烟测试或执行秒级的环境设置。

bash
/bin/bash -c "nvidia-smi && python -c 'import torch; print(torch.cuda.is_available())'"

另一个实例,执行轻量级初始化脚本:

bash
/bin/bash -c "python /workspace/init_credentials.py && echo 'Init done'"

注意

如果 init_credentials.py 脚本试图访问缓慢的网络 API,或依赖了未安装的 Python 包,可能执行失败。保证您的初始化脚本极其轻量,不依赖复杂计算或网络I/O。

打印开发机内网 IP 和 Nvidia GPU 驱动

开发机 /etc/profile.d/ 目录下的脚本会在用户每次登录 Shell 时被自动执行。我们可以通过在此路径下创建脚本,设置全局环境变量或加载自定义的启动脚本(开发机的登录 Banner 就是这样实现的)。

由于这种方式未直接修改系统主配置文件,即使改配开发机清空系统盘也仍然有效。

例如,使用以下启动命令配置 Shell 在登录时自动输出内网 IP、NVIDIA 驱动版本及 GPU 型号与数量,方便直接确认计算节点的网络与硬件环境。

shell
# --- Script 1: Create the Intranet IP Banner ---
cat << 'EOF' > /etc/profile.d/z98-intranet-ip.sh
#!/bin/bash
# Load common library for colors
[ -f /opt/devmachine/init/bin/common.sh ] && . /opt/devmachine/init/bin/common.sh

# Get IP
CURRENT_IP=$(hostname -i)

# Print IP
if type color_print &>/dev/null; then
    color_print "$(printf "Intranet IP:   %s" "$CURRENT_IP")"
else
    printf "\033[38;5;46mIntranet IP:   %s\033[0m\n" "$CURRENT_IP"
fi
EOF
chmod +x /etc/profile.d/z98-intranet-ip.sh


# --- Script 2: Create the Extended NVIDIA Info Banner ---
cat << 'EOF' > /etc/profile.d/z99-nvidia-info.sh
#!/bin/bash
# Load common library for colors
[ -f /opt/devmachine/init/bin/common.sh ] && . /opt/devmachine/init/bin/common.sh

if command -v nvidia-smi &> /dev/null; then
    # 1. Get Driver Version
    DRIVER=$(nvidia-smi --query-gpu=driver_version --format=csv,noheader 2>/dev/null | head -n 1)
    CAPS="${NVIDIA_DRIVER_CAPABILITIES:-Unknown}"
    
    # 2. Print Info
    if type color_print &>/dev/null; then
        color_print "$(printf "Detected NVIDIA Driver: %s" "$DRIVER")"
        color_print "$(printf "NVIDIA Driver Capabilities:  %s" "$CAPS")"
        
        # Loop through each GPU line from nvidia-smi -L and print it indented
        nvidia-smi -L | while read -r line; do
            # Add a small arrow or indent for visual hierarchy
             color_print "$(printf " └─ %s" "$line")"
        done
    else
        # Fallback if color_print is missing
        printf "\033[38;5;46mDetected NVIDIA Driver: %s\033[0m\n" "$DRIVER"
        printf "\033[38;5;46mNVIDIA Driver Capabilities:  %s\033[0m\n" "$CAPS"
        
        nvidia-smi -L | while read -r line; do
             printf "\033[38;5;46m └─ %s\033[0m\n" "$line"
        done
    fi
fi
EOF
chmod +x /etc/profile.d/z99-nvidia-info.sh

添加以上启动命令后,每次登录 Web Terminal 或 SSH 远程登录,均输出类似如下内容:

shell
Intranet IP:   10.208.14.233
Detected NVIDIA Driver: 535.129.03
NVIDIA Driver Capabilities:  all
 └─ GPU 0: NVIDIA H800 (UUID: GPU-8f4fb99c-d471-ab88-d989-3a59590b963b)

注意

开发机内网 IP 可用于同可用区内开发机之间(或 AI Coder 向开发机)快速传输数据。同可用区内网传输速度较快,获取开发机临时内网 IP 后,通过 scp 等方式快速传输数据(内网 SSH 端口为 22,支持使用开发机公网 SSH 密码验证)。开发机重启后内网 IP 可能会变化,需重新获取。

查看执行日志

开发机启动命令的执行日志存储在 /var/log/user_command 目录下。

shell
root@is-db4qbnrdrqt47e65-devmachine-0:~# ls /var/log/user_command
init_2025_11_18_12_52_08.log