change max GPU number - #3
Conversation
Split NVIDIA Build (nvapi-*) and Inference Hub (sk-*) env vars, load keys from ~/.nemoclaw/secrets.env, route Ultra via inference-api, and fix Tavily on rebuild resume.
Keep Tavily/Telegram support alongside upstream Brave egress verification and provider profile registration.
Removed unnecessary details about Dual NVIDIA keys and Secrets file while retaining key features for clarity.
Updated the README.fork.md to include new information and images.
Set toolSearch false for Ultra and document web_search usage so Tavily runs instead of failing tool_search_code.
Introduce the nemoclaw-cpu Helm chart with metrics-server-based autoscaling, install/recover/reset/load-test scripts, and documentation for running Inference Hub agents on MicroK8s (min 1, max 7 replicas per 8 vCPU).
Added an image and recovery instructions to README.
Introduce nemoclaw-gpu (Ollama + agent, DCGM gpu_utilization_percent HPA) with load-test and ops scripts tuned for 4× L40S. Split deploy guides into README-gpu/README-cpu and refresh the CPU chart helpers.
Removed 'GPU' from the title of the deployment README.
Updated images in README-gpu.md to include width and height attributes for better display.
Updated image syntax and added additional screenshots in the README for GPU deployment.
Updated README for GPU deployment with HPA details.
Signed-off-by: maggiezha <42832776+maggiezha@users.noreply.github.com>
Added port 9000 for the CPU deployment section.
Removed the third port entry from the table.
Signed-off-by: maggiezha <42832776+maggiezha@users.noreply.github.com>
Signed-off-by: maggiezha <42832776+maggiezha@users.noreply.github.com>
|
Important Review skippedToo many files! This PR contains 126 files, which is 26 over the limit of 100. To get a review, narrow the scope: Upgrade to a paid plan to raise the limit. ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (126)
You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
| local deploy="${2:?deploy}" | ||
| local hpa_name="${3:-${deploy}}" | ||
| local min="${4:-1}" | ||
| local max="${5:-7}" |
|
|
||
| local spec_min spec_max desired deploy_spec | ||
| spec_min="$(kubectl get "horizontalpodautoscaler/${hpa_name}" -n "${ns}" -o jsonpath='{.spec.minReplicas}' 2>/dev/null || echo 0)" | ||
| spec_max="$(kubectl get "horizontalpodautoscaler/${hpa_name}" -n "${ns}" -o jsonpath='{.spec.maxReplicas}' 2>/dev/null || echo 0)" |
| spec_min="$(kubectl get "horizontalpodautoscaler/${hpa_name}" -n "${ns}" -o jsonpath='{.spec.minReplicas}' 2>/dev/null || echo 0)" | ||
| spec_max="$(kubectl get "horizontalpodautoscaler/${hpa_name}" -n "${ns}" -o jsonpath='{.spec.maxReplicas}' 2>/dev/null || echo 0)" | ||
| desired="$(kubectl get "horizontalpodautoscaler/${hpa_name}" -n "${ns}" -o jsonpath='{.status.desiredReplicas}' 2>/dev/null || echo "")" | ||
| deploy_spec="$(kubectl get "deployment/${deploy}" -n "${ns}" -o jsonpath='{.spec.replicas}' 2>/dev/null || echo "")" |
| DEPLOYMENT="${DEPLOYMENT:-${RELEASE}-nemoclaw-cpu-agent}" | ||
| SERVICE="${SERVICE:-${DEPLOYMENT}}" | ||
| SERVICE_PORT="${SERVICE_PORT:-8080}" | ||
| LAST_HPA_LINE="" |
| set -eu | ||
|
|
||
| MODEL="${OLLAMA_MODEL:?OLLAMA_MODEL required}" | ||
| HOST="${OLLAMA_HOST:-0.0.0.0:11434}" |
| DEPLOYMENT="${DEPLOYMENT:-$(RELEASE="${RELEASE}" CHART_NAME=nemoclaw-gpu hpa_common_agent_deployment)}" | ||
| SERVICE="${SERVICE:-$(RELEASE="${RELEASE}" CHART_NAME=nemoclaw-gpu hpa_common_agent_service)}" | ||
| SERVICE_PORT="${SERVICE_PORT:-8081}" | ||
| LAST_HPA_LINE="" |
| } | ||
|
|
||
| helm_install | ||
| hpa_common_kick_deployment "${NAMESPACE}" "${DEPLOYMENT}" && helm_install || true |
| } | ||
|
|
||
| hpa_common_agent_deployment() { | ||
| echo "$(hpa_common_release_fullname)-agent" |
| } | ||
|
|
||
| hpa_common_agent_service() { | ||
| echo "$(hpa_common_release_fullname)-agent" |
| hpa_common_gpu_recreate_stale_workload "${NAMESPACE}" "${DEPLOYMENT}" "${DEPLOYMENT}" | ||
|
|
||
| helm_install | ||
| hpa_common_kick_deployment "${NAMESPACE}" "${DEPLOYMENT}" && helm_install || true |
|
|
||
| from __future__ import annotations | ||
|
|
||
| import asyncio |
| if (fs.existsSync(secretsFile)) { | ||
| return { ok: true, created: false, path: secretsFile }; | ||
| } | ||
| fs.writeFileSync(secretsFile, SECRETS_ENV_TEMPLATE, { encoding: "utf-8", mode: 0o600 }); |
| res.end(text); | ||
| } catch (err) { | ||
| res.writeHead(502, { "content-type": "application/json" }); | ||
| res.end(JSON.stringify({ error: String(err) })); |
| body: JSON.stringify({ | ||
| messages: [{ role: "user", content: q }], | ||
| max_tokens: 24, | ||
| }), |
| loops.push( | ||
| (async () => { | ||
| const rampEnd = Date.now() + RAMP_SEC * 1000; | ||
| let limit = Math.max(2, Math.ceil(share / 4)); |
| res.end(text); | ||
| } catch (err) { | ||
| res.writeHead(502, { "content-type": "application/json" }); | ||
| res.end(JSON.stringify({ error: String(err) })); |
| { | ||
| hostname: process.env.KUBERNETES_SERVICE_HOST, | ||
| port: process.env.KUBERNETES_SERVICE_PORT || 443, | ||
| path, | ||
| method: "GET", | ||
| headers: { Authorization: `Bearer ${token}` }, | ||
| ca, | ||
| rejectUnauthorized: true, | ||
| }, |
| body: JSON.stringify({ | ||
| messages: [{ role: "user", content: q }], | ||
| max_tokens: MAX_TOKENS, | ||
| stream: false, | ||
| }), |
| import https from "node:https"; | ||
| import { setTimeout as sleep } from "node:timers/promises"; | ||
|
|
||
| const SERVICE_FALLBACK = (process.env.TARGET_URL || "http://nemoclaw-gpu-agent:8081").replace( |
| const isNvidia = credentialEnv === "NVIDIA_API_KEY"; | ||
| const isNvidiaBuild = credentialEnv === "NVIDIA_API_KEY"; | ||
| const isInferenceHub = credentialEnv === "NVIDIA_INFERENCE_HUB_API_KEY"; | ||
| const isNvidia = isNvidiaBuild || isInferenceHub; |
|
move to other PR |
Summary
Related Issue
Changes
Type of Change
Verification
npx prek run --all-filespassesnpm testpassesnpm run docsbuilds without warnings (doc changes only)Signed-off-by: Your Name your-email@example.com