本教程整合了社区多位大佬的经验,详细介绍如何从零开始注册 NVIDIA 开发者计划,通过浏览器控制台脚本自动抢占稀缺的云主机资源,并通过 API 脚本实现自动化保活。


一、 账号注册

  1. 准备邮箱:需要准备一个能够获得 NVIDIA 开发者计划资格的邮箱。
  2. 优先推荐自定义域名邮箱(如通过 Cloudflare、阿里等托管的独立域名邮箱)。
  3. 经测试,部分免费域名邮箱(如 seek.li 等)目前也可以成功通过验证。
  4. 访问注册地址:打开 NVIDIA DSX-AIR 注册页面
  5. 资格确认:完成注册后,确认控制台显示已获得符合资格的开发者面板,即可进入下一步。

二、 创建实例与抢机配置

目前平台资源非常紧缺,直接创建大概率会提示没有资源(提示错误或失败),需要通过控制台脚本进行持续挂机抢开。

1. 基础配置创建

  1. 登录控制台,找到 Simulations(仿真实验)板块并点击创建。

  2. oob-mgmt-server 节点拖拽到主界面。
  3. 点击该节点,在右侧面板中选择你需要的硬件规格以及操作系统(推荐选择 Ubuntu)。
  4. 点击右下角的 Update Configuration(更新配置)
  5. 双击 oob-mgmt-server,点击 Power On(开机)
  6. 注:如果运气好直接开机成功,可跳过下方抢机步骤;若提示没有资源,请继续阅读。

2. 浏览器控制台自动抢机

  1. 在当前仿真实验(Simulation)页面,观察浏览器地址栏,复制你的 Simulation ID
  2. 例如:URL 为 https://dsx-air.nvidia.com/simulations/4c5987bf-xxxx-xxxx-xxxx-xxxxxxxxx,则 4c5987bf... 就是你的 ID。
  3. 按下键盘的 F12 键打开开发者工具,切换到 Console(控制台) 标签页。
  4. 复制并修改下方抢机脚本,将代码中 #sid 的值替换为你刚刚复制的真实 ID。
  5. 将修改后的代码粘贴进控制台并按 Enter 回车运行:
if (window._sMonitor?.isActive) { 
    window._sMonitor.destroy(); 
} 

class SMonitor { 
    // ⚠️ 请在这里替换为您自己的 Simulation ID
    #sid = "4c5987bf-0588-4795-xxxxxxxxx-xxxxxxxxx"; 
    #intervalMs = 3000; // 抢开间隔:3000毫秒(3秒)
    #abortController = null; 
    #timerId = null; 

    constructor() { 
        this.isActive = true; 
        this.#initLoop(); 
    } 

    get #requestConfig() { 
        return { 
            method: "PATCH", 
            mode: "cors", 
            credentials: "include", 
            referrer: `https://dsx-air.nvidia.com/simulations/${this.#sid}`, 
            headers: { 
                "accept": "application/json, text/plain, */*", 
                "cache-control": "no-cache", 
                "pragma": "no-cache" 
            } 
        }; 
    } 

    async #pingState() { 
        const timestamp = () => `[${new Date().toLocaleTimeString()}]`; 
        const url = `https://api.dsx-air.nvidia.com/api/v3/simulations/${this.#sid}/start/`; 
        try { 
            const response = await fetch(url, { ...this.#requestConfig, signal: this.#abortController?.signal }); 
            const rawText = await response.text(); 
            let parsedData; 
            try { 
                parsedData = JSON.parse(rawText); 
            } catch { 
                parsedData = rawText; 
            } 
            if (parsedData && typeof parsedData === 'object' && 'state' in parsedData) { 
                console.log(`${timestamp()} State:`, parsedData.state); 
            } else { 
                console.log(`${timestamp()} Raw Response:`, parsedData); 
            } 
            if (!response.ok) { 
                console.log(`${timestamp()} HTTP Error:`, response.status); 
            } 
        } catch (err) { 
            console.log(`${timestamp()} Network/Request Failed:`, err); 
        } 
    } 

    #initLoop() { 
        this.#abortController = new AbortController(); 
        const tick = async () => { 
            if (!this.isActive) return; 
            await this.#pingState(); 
            if (this.isActive) { 
                this.#timerId = setTimeout(tick, this.#intervalMs); 
            } 
        }; 
        tick(); 
    } 

    destroy() { 
        this.isActive = false; 
        if (this.#timerId) clearTimeout(this.#timerId); 
        if (this.#abortController) this.#abortController.abort(); 
        console.log("抢机脚本已停止并清理。"); 
    } 
} 

window._sMonitor = new SMonitor();
💡 注意:脚本运行后,控制台持续输出 HTTP Error: 400 State: REQUESTING 属于正常现象,代表目前由于没有空闲资源导致开机失败,脚本正在持续重试。只需挂着页面等待其抢到资源即可。

三、 连接与端口映射

成功开机后,需要为实例配置外部访问。

  1. 查看默认凭据:在控制台网页的右下角会展示该实例的初始用户名和密码(通常用户名为 ubuntu,密码为 nvidia)。
  2. 配置端口映射:由于云主机没有直接暴露公网 IP 的所有端口,你需要手动在控制台内为你需要访问的服务(如 SSH 的 22 端口)创建映射规则。
  3. 获取连接信息:映射建立后,控制台会生成对应的 公网IP映射后的外网端口。你可以通过该信息直接连接,或连接后自行 DD 更换其他系统。

四、 创建 API 与自动化保活

⚠️ 保活必要性:免费用户创建的实例默认最多只能保持 3 天(72 小时) 的活跃状态,随后主机会自动停机并进入休眠。为了让主机长久运行,我们需要配置 API 并通过定时脚本自动延长主机的休眠倒计时。

1. 获取 NGC API Key

  1. 访问 NVIDIA NGC 密钥管理页面:NVIDIA NGC API Keys
  2. 根据页面提示选择好对应的权限范围。
  3. 点击 Create API Key 生成密钥,并妥善保存该密钥(该密钥只显示一次)。

    2. 保活 Shell 脚本

在你的保活服务器或实例本身(如果配置了本地 Crontab 并能确保网络畅通)中创建一个 Shell 脚本,例如 nvidia_keepalive.sh

#!/usr/bin/env bash
# ==============================================================================
# NVIDIA DSX-AIR 自动保活脚本
# 建议配置定时任务(Crontab)每 6 小时自动执行一次
# ==============================================================================
set -euo pipefail

NVIDIA_AIR_API_BASE="https://api.air-ngc.nvidia.com/api/v3"

# ⚠️ 请在下方填入你真实的 NGC API KEY 和 Simulation ID
NVIDIA_AIR_API_KEY="你的_NGC_API_KEY"
SIMULATION_ID="你的_simulation_id"

# 计算延迟时间(设置为当前时间往后顺延 71 小时)
target_sleep_at="$( python3 - <<'PY'
from datetime import datetime, timedelta, timezone
target = datetime.now(timezone.utc) + timedelta(hours=71)
print(target.replace(microsecond=0).isoformat().replace("+00:00", "Z"))
PY
)"

payload="$(mktemp)"
before_body="$(mktemp)"
after_body="$(mktemp)"
trap 'rm -f "$payload" "$before_body" "$after_body"' EXIT

printf '{"sleep_at":"%s"}' "$target_sleep_at" > "$payload"
simulation_url="${NVIDIA_AIR_API_BASE%/}/simulations/${SIMULATION_ID}/"

echo "目标保活延长时间点: $target_sleep_at"

# 1. 查询当前实例状态
curl --ipv4 -sS \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'User-Agent: air-sdk/1.3.1' \
  -H 'X-Air-Sdk-Version: 1.3.1' \
  -H "Authorization: Bearer $NVIDIA_AIR_API_KEY" \
  "$simulation_url" > "$before_body"

echo "续期前休眠时间: $(python3 -c 'import json,sys; print(json.load(open(sys.argv[1])).get("sleep_at"))' "$before_body")"

# 2. 发送 PATCH 请求更新休眠时间
curl --ipv4 -sS -X PATCH \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'User-Agent: air-sdk/1.3.1' \
  -H 'X-Air-Sdk-Version: 1.3.1' \
  -H "Authorization: Bearer $NVIDIA_AIR_API_KEY" \
  --data @"$payload" \
  "$simulation_url" > "$after_body"

after_sleep_at="$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1])).get("sleep_at"))' "$after_body")"
echo "续期后休眠时间: $after_sleep_at"

# 3. 验证结果
if [ "$after_sleep_at" != "$target_sleep_at" ]; then
    echo "❌ 验证失败: 预期时间为 $target_sleep_at,但实际返回为 $after_sleep_at" >&2
    exit 1
fi

echo ""

3. 配置定时任务 (Crontab)

给脚本赋予执行权限,并建议设置每 6 小时执行一次:

# 赋予执行权限
chmod +x nvidia_keepalive.sh

# 手动测试运行一次确保没有报错
./nvidia_keepalive.sh

# 打开 crontab 编辑器
crontab -e

# 添加以下一行(每6小时执行一次,请将路径改为你脚本的实际绝对路径)
0 */6 * * * /path/to/nvidia_keepalive.sh >> /path/to/keepalive.log 2>&1

声明:本脚本及操作流程整理自 NodeSeek 社区。因平台机制可能随时调整,请按需使用并关注平台政策变化。