Manage dev nodes (container/VM instances) on the Bohrium platform. Prefer bohr CLI; fall back to the API for unsupported operations.
Dev nodes are used for data preparation, compilation, debugging, and post-processing. They support Web Shell and SSH connections.
json
"bohrium-node": {
"enabled": true,
"apiKey": "YOUR_ACCESS_KEY",
"env": { "ACCESS_KEY": "YOUR_ACCESS_KEY" }
}
bash
# macOS
/bin/bash -c "$(curl -fsSL https://dp-public.oss-cn-beijing.aliyuncs.com/bohrctl/1.0.0/install_bohr_mac_curl.sh)"
# Linux
/bin/bash -c "$(curl -fsSL https://dp-public.oss-cn-beijing.aliyuncs.com/bohrctl/1.0.0/install_bohr_linux_curl.sh)"
source ~/.bashrc && export PATH="$HOME/.bohrium:$PATH"
bash
bohr node list # All nodes (table)
bohr node list --json # JSON
bohr node list -s # Running only
bohr node list -p # Paused only
bohr node list -d # Pending only
bohr node list -w # Waiting only
bohr node list -q # ID and name only
JSON fields: nodeId, nodeName, status (Started/Paused/Pending/Waiting), cpu/ memory/ gpu, ip, imageName, cost
bash
bohr node create # Interactive: Project -> Image -> Machine -> Name -> Disk
bohr node createis interactive. For automation, use the API (see below).
Recommended images:
ScenarioImageCPU basicregistry.dp.tech/dptech/ubuntu:20.04-py3.10CPU + Intel MPIregistry.dp.tech/dptech/ubuntu:20.04-py3.10-intel2022GPU basicregistry.dp.tech/dptech/ubuntu:20.04-py3.10-cuda11.6GPU + Intel MPIregistry.dp.tech/dptech/ubuntu:20.04-py3.10-intel2022-cuda11.6
bash
bohr node connect 1431145 # Passwordless SSH via nodeId
Alternative: Web Shell via the Bohrium web UI (auto-login as root), or manual SSH using credentials from the API.
bash
bohr node stop 1431145 # Stop (pause billing, data preserved)
bohr node delete 1431145 # Delete (irreversible)
Important: Nodes are billed continuously while running. Stop or delete when not in use.
ItemDetailsSystem diskSelected at creation (max 100GB); stores OS packagesPersonal disk /personal500GB per user per project; persists after node releaseShared disk /share1TB per project; read/write for all membersPublic ports50001-50005 open by defaultGPU driverv525 default; cannot upgradeDocker****Not supported inside container nodes (security)
Mount datasets when creating a container node; access via path (e.g. /bohr/my-dataset/v1).
df -a | grep bohr to view mount pointsScenarioBoot timeCached CPU machine20sCached GPU machine40sGPU under resource pressure1-5 minNo cache (new/expired image)10-30 min (image pull)
Cache rules:
python
import os, requests
AK = os.environ.get("ACCESS_KEY", "")
BASE = "https://open.bohrium.com/openapi/v1/node"
HEADERS = {"accessKey": AK}
HEADERS_JSON = {**HEADERS, "Content-Type": "application/json"}
# Programmatic node creation (non-interactive)
r = requests.post(f"{BASE}/add", headers=HEADERS_JSON, json={
"projectId": 154, "name": "my-node", "imageId": 2168,
"machineConfig": {"type": 0, "value": 388, "label": "c2_m4_cpu"},
"diskSize": 20,
})
# Returns: {"code": 0, "data": {"machineId": 1427300}}
# Available resources
r = requests.get(f"{BASE}/resources", headers=HEADERS)
# Returns: {disks, cpuList, gpuList} — value = skuId
# Resource pricing
r = requests.get(f"{BASE}/resources/price", headers=HEADERS,
params={"skuId": 388, "projectId": 154})
# Returns: {"data": {"price": "0.4"}} (CNY/hour)
# Node details (includes SSH password)
r = requests.get(f"{BASE}/{machine_id}", headers=HEADERS)
# Returns: {nodeId, nodeName, status, ip, nodeUser, nodePwd, domainName, ...}
# Restart (must stop first)
requests.post(f"{BASE}/restart/{machine_id}", headers=HEADERS)
# Rename
requests.post(f"{BASE}/modify/{machine_id}", headers=HEADERS_JSON,
json={"name": "new-name"})
# View/bind datasets
r = requests.get(f"{BASE}/ds", headers=HEADERS, params={"nodeId": node_id})
requests.post(f"{BASE}/ds/bind", headers=HEADERS_JSON,
json={"nodeId": node_id, "datasetId": dataset_id})
statusMeaningCLI Display2RunningStarted-1Stopped/ReleasedPaused
ResourceLimitNodes4 per user per projectSystem diskMax 100GBPersonal disk500GB per user per projectShared disk1TB per project
MethodEnv var sourceWeb ShellSystem env + /root/.bashrcSSH/root/.bashrc only (overwrites globals)
ProblemCauseSolutionNo resource for selected machineOut of stockTry another spec or retry laterrecord not foundInvalid machineIdVerify with bohr node list --jsonRestart failsNode not stoppedbohr node stop first, wait for PausednodeId vs machineIdTwo different IDsCLI uses nodeId; API uses machineId; dataset API uses nodeIdSSH failsImage lacks SSHDockerHub images need manual sshd installDomain not resolvingStopped >7 daysRestart; wait 10-30 min for DNS; use Web Shell meanwhileSlow terminalVPN/network or browser memoryDisable VPN; refresh pageCannot run DockerContainer securityUse VM image LBG_Common_v2Image pullingCache not ready or expiredWait 10-30 min after build