cd /news/artificial-intelligence/setting-up-a-dgx-spark-for-ai-develo… · home topics artificial-intelligence article
[ARTICLE · art-111339] src=gist.github.com ↗ pub= topic=artificial-intelligence verified=true sentiment=· neutral

Setting up a DGX Spark for AI Development

An engineer detailed the setup of an NVIDIA DGX Spark for AI development, covering system updates, dependency installation, and configuration of Ollama with models like Qwen3.8 and Qwen2.5-Coder. The guide includes steps for enabling LAN access, setting context length, and security considerations for local AI tooling.

read9 min views35 publishedAug 19, 2026

Initial DGX Spark SetupDGX Spark DependenciesOllamaOpenCode CLIAI Coding in IDEOpen WebUISecurity ConsiderationsPrivacy ConsiderationsOptional Hardware Recommendations

After completing any system updates, the first real thing you would want to do is open the DGX Dashboard application.

  • Connect to the DGX Spark using a keyboard, mouse and monitor
  • Click Show Apps

icon in bottom left - Search for and Open the DGX Dashboard application - Visit Updates and apply any updates - Visit Settings and update aHostname*

if desired ( our documentation usesdgx-spark

as the Hostname ) and disableTelemetry if desired ( recommended )

*

You will need to restart the DGX Spark after changing the Hostname.

You will need to run the following while connected to the DGX Spark.

sudo apt update
sudo apt install -y build-essential curl git libbz2-dev libffi-dev liblzma-dev libncursesw5-dev libreadline-dev libsqlite3-dev libssl-dev libxml2-dev libxmlsec1-dev tk-dev uuid-dev xz-utils zlib1g-dev

You are likely going to want different versions of Python, other than the 3.12 version that comes with the DGX Spark.

curl https://pyenv.run | bash

Then add pyenv to your shell startup configuration. Since DGX OS normally uses Bash:

cat >> ~/.bashrc <<'EOF'

export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init - bash)"
EOF

Also add it to your login profile:

cat >> ~/.profile <<'EOF'

export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
EOF

Reload the shell:

exec "$SHELL"

Then verify:

pyenv --version

Connect to DGX Spark

Replace

aidev

with you actual username anddgx-spark

with your Hostname

ssh aidev@dgx-spark.local

Install/Update Ollama:

curl -fsSL https://ollama.com/install.sh | sh

Verify Ollama installation:

ollama --version
ollama pull qwen3.8:27b
ollama pull qwen2.5-coder:7b
ollama pull nomic-embed-text

Verify Ollama models:

ollama list
Model Why this model
qwen3.8:27b
Primary reasoning/agent model. The ~27B size provides substantially better reasoning, instruction following, code understanding, and multi-step problem solving than a small autocomplete model, while remaining practical to run locally on the DGX Spark. It's intended for chat, code analysis, edits, and agentic work.
qwen2.5-coder:7b
Dedicated autocomplete model. Autocomplete needs very low latency and is invoked constantly. A specialized 7B coding model is fast enough for interactive completion while still being strong at predicting code, avoiding the latency and compute cost of invoking the 27B model on every keystroke.
nomic-embed-text
Dedicated embedding/retrieval model. It's purpose-built to turn text and source code into embeddings for semantic search. It's small, fast, and inexpensive to keep available, making it a better choice for codebase indexing/retrieval than using a generative LLM.
sudo systemctl edit ollama

Add the following:

[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_CONTEXT_LENGTH=262144"
Environment="OLLAMA_KEEP_ALIVE=-1"
Environment="OLLAMA_NUM_PARALLEL=1"
Environment="OLLAMA_MAX_LOADED_MODELS=3"
Environment="OLLAMA_FLASH_ATTENTION=1"
Environment="OLLAMA_KV_CACHE_TYPE=f16"
Environment="OLLAMA_NO_CLOUD=1"

Reload Ollama:

sudo systemctl daemon-reload
sudo systemctl restart ollama
Setting What it does / Why it matters
OLLAMA_HOST=0.0.0.0:11434
Binds Ollama to all network interfaces instead of localhost only. This allows trusted LAN clients such as the MacBook running VS Code/Continue to reach the DGX Spark.
OLLAMA_CONTEXT_LENGTH=262144
Sets the model context window to 262K tokens, matching the full context capacity of Qwen 3.8 27B. This gives coding agents maximum working space for repository context, conversation history, tool definitions, command output, diffs, and retrieved code, reducing the need for context compaction during complex or long-running development tasks.
OLLAMA_KEEP_ALIVE=-1
Keeps loaded models resident in memory indefinitely rather than un them after inactivity. This eliminates model reload/cold-start delays during intermittent development work.
OLLAMA_NUM_PARALLEL=1
Limits each model to one concurrent request. For a primarily single-user coding server, this prioritizes memory efficiency and large-context capacity over request concurrency.
OLLAMA_MAX_LOADED_MODELS=3
Allows up to three models to remain loaded simultaneously. This matches the intended workload: primary coding/chat model, autocomplete model, and embedding model.
OLLAMA_FLASH_ATTENTION=1
Enables Flash Attention, an optimized attention implementation that reduces memory usage and can improve performance, particularly with large context windows such as 64K.
OLLAMA_KV_CACHE_TYPE=f16
Stores the attention KV cache in 16-bit floating-point form. This uses roughly twice the memory of q8_0, but avoids KV-cache quantization and preserves maximum precision, making it preferable when memory capacity is not a constraint.
OLLAMA_NO_CLOUD=1
Disables Ollama's cloud functionality. This ensures the DGX is configured as a local-only inference server, which is desirable for privacy, security, and predictable data flow.

Now we are going to preload our largest model into memory on boot. The qwen3.8:27b

model has the expensive cold-start penalty. The 7B autocomplete model and Nomic embed model are much smaller and will load comparatively quickly, and will remain in memory after being loaded.

First, let's create our script:

sudo nano /usr/local/bin/ollama-preload.sh

Then enter the following code:

#!/bin/bash

set -e

OLLAMA_URL="http://127.0.0.1:11434"
MAX_ATTEMPTS=30
SLEEP_SECONDS=2

for ((attempt=1; attempt<=MAX_ATTEMPTS; attempt++)); do
    if curl -sf "${OLLAMA_URL}/api/tags" >/dev/null; then
        echo "Ollama is ready."
        break
    fi

    if (( attempt == MAX_ATTEMPTS )); then
        echo "ERROR: Ollama did not become ready within 60 seconds." >&2
        exit 1
    fi

    sleep "${SLEEP_SECONDS}"
done

echo "Pre qwen3.8:27b..."

curl --fail --silent --show-error \
    "${OLLAMA_URL}/api/generate" \
    -H "Content-Type: application/json" \
    -d '{"model":"qwen3.8:27b","keep_alive":-1}'

echo "Model preload complete."

Now let's make that executable:

sudo chmod +x /usr/local/bin/ollama-preload.sh

Create systemd service:

sudo nano /etc/systemd/system/ollama-preload.service

Use the following code:

[Unit]
Description=Preload Ollama      
Requires=ollama.service
After=ollama.service

[Service]
Type=oneshot
ExecStart=/usr/local/bin/ollama-preload.sh
TimeoutStartSec=120
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Reload System:

sudo systemctl daemon-reload
sudo systemctl enable ollama-preload.service
sudo systemctl start ollama-preload.service

One you have setup your DGX Spark, you can use OpenCode in your terminal on any machine that has access to the DGX Spark.

curl -fsSL https://opencode.ai/install | bash

Then you can confirm it is installed:

opencode --version

Create a directory:

mkdir -p ~/.config/opencode

Create your config file:

nano ~/.config/opencode/opencode.json

Paste in the JSON from openconfig.json

Create agents folder:

mkdir -p ~/.config/opencode/agents/

Create agent files inside that folder:

In your terminal, you can now run:

opencode models ollama

You should see:

ollama/qwen2.5-coder:7b
ollama/qwen3.8:27b

Now you can change to any project directory where you want to work, and run:

cd /path/to/your/project
opencode

Then to test OpenCode you can just ask a starter question like:

What can you tell me about this project?

If you would like to use your DGX Spark in your IDE:

Install the Continue.dev IDE Extension.

Create your config file:

nano ~/.continue/config.yaml

Paste in the following:

name: DGX Spark
version: 1.0.0
schema: v1
models:
  - name: Qwen 3.8 27B
    provider: ollama
    model: qwen3.8:27b
    apiBase: http://dgx-spark.local:11434
    roles:
      - chat
      - edit
      - apply
    capabilities:
      - tool_use
      - image_input
  - name: Qwen 2.5 Coder 7B
    provider: ollama
    model: qwen2.5-coder:7b
    apiBase: http://dgx-spark.local:11434
    roles:
      - autocomplete
  - name: Nomic Embed
    provider: ollama
    model: nomic-embed-text
    apiBase: http://dgx-spark.local:11434
    roles:
      - embed
context:
  - provider: code
  - provider: codebase
  - provider: currentFile
  - provider: diff
  - provider: docs
  - provider: folder
  - provider: open
  - provider: problems
  - provider: terminal
  - provider: tree

Now all you need to do is Open the Continue Extension in your IDE ( restart your IDE if it was already open ).

Connect to DGX Spark

ssh aidev@dgx-spark.local

Install required version of Python

pyenv install 3.11.13

Create a dedicated Open WebUI environment

mkdir -p ~/apps/open-webui
cd ~/apps/open-webui

Tell pyenv that this directory should use Python 3.11:

pyenv local 3.11.13

Now create the virtual environment:

python -m venv .venv

Activate it:

source .venv/bin/activate

Upgrade packaging tools:

python -m pip install --upgrade pip setuptools wheel
pip install open-webui

Test that this runs as expected:

export OLLAMA_BASE_URL="http://localhost:11434"
export DO_NOT_TRACK="true"
export SCARF_NO_ANALYTICS="true"
export ANONYMIZED_TELEMETRY="false"

open-webui serve --host 0.0.0.0 --port 8080

This DGX Spark configuration is designed for flexible development use across both trusted home networks and direct-wired travel environments. The appropriate security posture depends on how the Spark is connected, with additional firewall protections recommended whenever it must operate on an untrusted or unknown network.

When the DGX Spark is connected to a trusted private home Wi-Fi network, a host-level firewall such as UFW is generally optional. The home router/firewall provides the primary security boundary against unsolicited Internet traffic.

For travel, a direct Ethernet connection between the development laptop and DGX Spark provides a simple private network. This avoids placing the DGX Spark directly on hotel, conference, airport, or other untrusted Wi-Fi networks.

If the DGX Spark must connect directly to a network that is public, shared, or not fully trusted, enable a host firewall.

When administering the Spark remotely, verify that SSH is permitted BEFORE enabling UFW to avoid locking yourself out.

Ubuntu's UFW provides a straightforward baseline:

sudo ufw default deny incoming
sudo ufw default allow outgoing

Then explicitly permit only required services. For example:

sudo ufw allow 22/tcp

sudo ufw allow 11434/tcp

sudo ufw allow 3000/tcp

Enable and verify the firewall:

sudo ufw enable
sudo ufw status verbose

Important: When default deny incoming is enabled, every remotely accessible service must be explicitly permitted. Developers running dynamic Node.js applications, Vite servers, Jupyter, debugging tools, or other services will need to add rules for their respective ports.

Prevent submitting hardware configuration, RAM/disk sizes, timezone, language, etc.

ubuntu-report -f send no

Disable VS Code telemetry

  • Open VS Code.
  • Press Cmd+, to open Settings. - In the search box, enter:
telemetry
  • Find Telemetry: Telemetry Level.
  • Set it to:
off

You an also uncheck everything else you want to disable.

{
    "allowAnonymousTelemetry": false
}

In your ~/.config/opencode/opencode.json

file:

{
  "share": "disabled"
}

External USB-C SSD (2–4 TB+)- Useful for storing training datasets, RAG collections, media, model exports, checkpoints, and other bulk data while reserving the DGX Spark's internal NVMe for frequently accessed models, caches, applications, and performance-sensitive AI workloads.USB-C to Ethernet Adapter- Provides the laptop with a dedicated wired Ethernet connection to the DGX Spark when Wi-Fi is unavailable, untrusted, or undesirable. Particularly useful for laptops without built-in Ethernet.CAT6 Cable (3 ft)- Enables a simple, fast direct connection between the development laptop and DGX Spark without relying on hotel, conference, or other external network infrastructure.HDMI Dummy Plug- A DGX Spark can operate completely headless and does not require a monitor for SSH, Ollama, Jupyter, NVIDIA Sync, or other network-based development workflows. However, an inexpensive HDMI dummy plug can be useful if you plan to use the Ubuntu graphical desktop remotely, as it causes the system to detect a persistent display and can avoid resolution, remote-desktop, or display-session issues sometimes encountered on fully headless systems.Compact Keyboard w/ Trackpad- Primarily a recovery tool. Useful if you need local console access and can't restore networking remotely.** USB-C to USB-A Adapter**- The DGX Spark provides USB-C ports but no traditional USB-A ports. A compact adapter is useful for connecting common keyboards, mice, USB flash drives, recovery media, and other legacy USB peripherals, particularly when troubleshooting or performing system recovery.Compact HDMI Cable- Worth carrying as a recovery option. If networking, SSH, or remote desktop configuration fails, you can connect the Spark to a hotel TV or other available HDMI display for troubleshooting.

── more in #artificial-intelligence 4 stories · sorted by recency
── more on @nvidia 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/setting-up-a-dgx-spa…] indexed:0 read:9min 2026-08-19 ·