網頁

2026年2月3日 星期二

DGX Spark 安裝 Riva ASR

參考文件 https://docs.nvidia.com/nim/riva/asr/latest/overview.html

$ export NGC_API_KEY="NTVwdDZqbTdrNnBva285Y3EzbmQxOGNodjY6NWM0NjYzYjYtMzczMy00MjVkLTg1NWQtZTE2MDNmZTAxNDBj"
$ echo "$NGC_API_KEY" | docker login nvcr.io --username '$oauthtoken' --password-stdin

parakeet-0-6b-ctc-en-us 缺 arm64 版本
parakeet-1-1b-ctc-en-us ok
parakeet-tdt-0.6b-v2 缺 arm64 版本
parakeet-1-1b-rnnt-multilingual 失敗
parakeet-ctc-0.6b-zh-cn 缺 arm64 版本
parakeet-ctc-0.6b-zh-tw 缺 arm64 版本

$ export CONTAINER_ID=parakeet-ctc-0.6b-zh-tw
$ export NIM_TAGS_SELECTOR="mode=str,vad=silero,diarizer=sortformer"

$ docker run -it --rm --name=$CONTAINER_ID \
   --gpus '"device=0"' \
   --shm-size=8GB \
   -e NGC_API_KEY \
   -e NIM_HTTP_API_PORT=9001 \
   -e NIM_GRPC_API_PORT=50052 \
   -p 9001:9001 \
   -p 50052:50052 \
   -e NIM_TAGS_SELECTOR \
   nvcr.io/nim/nvidia/$CONTAINER_ID:latest

# Create the cache directory on the host machine:
$ export LOCAL_NIM_CACHE=$(pwd)/cache/nim
$ mkdir -p $LOCAL_NIM_CACHE
$ chmod 777 $LOCAL_NIM_CACHE

# Set the appropriate values
$ export CONTAINER_ID=parakeet-1-1b-ctc-en-us
$ export NIM_TAGS_SELECTOR="name=parakeet-1-1b-ctc-en-us,mode=all,vad=silero,diarizer=sortformer,model_type=prebuilt"

# Run the container with the cache directory mounted in the appropriate location:
$ docker run -it --rm --name=$CONTAINER_ID \
      --gpus '"device=0"' \
      --shm-size=8GB \
      -e NGC_API_KEY \
      -e NIM_TAGS_SELECTOR \
      -e NIM_HTTP_API_PORT=9001 \
      -e NIM_GRPC_API_PORT=50052 \
      -p 9001:9001 \
      -p 50052:50052 \
      -v $LOCAL_NIM_CACHE:/opt/nim/.cache \
      nvcr.io/nim/nvidia/$CONTAINER_ID:latest
   
$ curl -X 'GET' 'http://localhost:9001/v1/health/ready'
{"status":"ready"}

$ uv init riva-client
$ cd riva-client/
$ rm .python-version
$ uv venv --python 3.10
$ uv add nvidia-riva-client
$ git clone https://github.com/nvidia-riva/python-clients.git

$ sudo apt-get install python3-pip
$ pip install -U nvidia-riva-client
$ git clone https://github.com/nvidia-riva/python-clients.git

$ docker cp $CONTAINER_ID:/opt/riva/wav/zh-TW_sample.wav .
$ python3 python-clients/scripts/asr/transcribe_file.py \
   --server 0.0.0.0:50052 \
   --list-models
Available ASR models
{'en-US': [{'model': ['parakeet-1.1b-en-US-asr-streaming-silero-vad-sortformer']}]}
$ python3 python-clients/scripts/asr/transcribe_file_offline.py \
   --server 0.0.0.0:50052 \
   --list-models
Available ASR models
{}
$ curl -s http://0.0.0.0:9001/v1/audio/transcriptions -F language=zh-TW \
   -F file="@zh-TW_sample.wav"
   
$ docker stop $CONTAINER_ID
$ docker rm $CONTAINER_ID

https://docs.nvidia.com/nim/riva/asr/latest/support-matrix.html#parakeet-0-6b-ctc-taiwanese-mandarin-english
Available modes include streaming low latency (str), 
streaming high throughput (str-thr), and offline (ofl). 
Setting the mode to (all) deploys all inference modes where applicable.
The profiles with silero and sortformer use Silero VAD to detect start and end of utterance 
and Sortformer SD for speaker diarization.

CONTAINER_ID=parakeet-ctc-0.6b-zh-tw
NIM_TAGS_SELECTOR
mode=ofl,vad=default,diarizer=disabled
mode=str,vad=default,diarizer=disabled
mode=str-thr,vad=default,diarizer=disabled
mode=all,vad=default,diarizer=disabled
mode=ofl,vad=silero,diarizer=sortformer
mode=str,vad=silero,diarizer=sortformer
mode=str-thr,vad=silero,diarizer=sortformer
mode=all,vad=silero,diarizer=sortformer

DGX Spark 安裝 Riva TTS

參考文件 https://docs.nvidia.com/nim/riva/tts/latest/overview.html

$ export NGC_API_KEY="Y6NWM0NjYzYjYtMzczMy00MjVkLTg1NWQtZTE2MDNmZTAxNDBj"
$ echo "$NGC_API_KEY" | docker login nvcr.io --username '$oauthtoken' --password-stdin

$ export CONTAINER_ID=magpie-tts-multilingual
$ export NIM_TAGS_SELECTOR=name=magpie-tts-multilingual

$ docker run -it --rm --name=$CONTAINER_ID \
   --gpus '"device=0"' \
   --shm-size=8GB \
   -e NGC_API_KEY \
   -e NIM_HTTP_API_PORT=9000 \
   -e NIM_GRPC_API_PORT=50051 \
   -p 9000:9000 \
   -p 50051:50051 \
   -e NIM_TAGS_SELECTOR \
   nvcr.io/nim/nvidia/$CONTAINER_ID:latest

# Create the cache directory on the host machine
$ export LOCAL_NIM_CACHE=~/.cache/nim
$ mkdir -p $LOCAL_NIM_CACHE
$ chmod 777 $LOCAL_NIM_CACHE

# Set appropriate value for container ID
$ export CONTAINER_ID=magpie-tts-multilingual

# Set the appropriate values for NIM_TAGS_SELECTOR.
$ export NIM_TAGS_SELECTOR="name=magpie-tts-multilingual,model_type=prebuilt"

# Run the container with the cache directory mounted in the appropriate location
$ docker run -it --rm --name=$CONTAINER_ID \
   --gpus '"device=0"' \
   --shm-size=8GB \
   -e NGC_API_KEY \
   -e NIM_TAGS_SELECTOR \
   -e NIM_HTTP_API_PORT=9000 \
   -e NIM_GRPC_API_PORT=50051 \
   -p 9000:9000 \
   -p 50051:50051 \
   -v $LOCAL_NIM_CACHE:/opt/nim/.cache \
   nvcr.io/nim/nvidia/$CONTAINER_ID:latest
   
$ curl -X 'GET' 'http://localhost:9000/v1/health/ready'
{"status":"ready"}

$ sudo apt-get install python3-pip
$ pip install -U nvidia-riva-client
$ cd $HOME
$ git clone https://github.com/nvidia-riva/python-clients.git

$ curl -sS http://localhost:9000/v1/audio/list_voices | jq
{
   "en-US,es-US,fr-FR,de-DE,zh-CN": {
      "voices": [
            "Magpie-Multilingual.ZH-CN.HouZhen",
            "Magpie-Multilingual.ZH-CN.Siwei",
            "Magpie-Multilingual.ZH-CN.Louise",
            "Magpie-Multilingual.ZH-CN.Pascal",
            "Magpie-Multilingual.ZH-CN.Isabela",
            "Magpie-Multilingual.ZH-CN.Diego",
            "Magpie-Multilingual.ZH-CN.Ray",
            "Magpie-Multilingual.ZH-CN.Mia",
            "Magpie-Multilingual.ZH-CN.Aria",
            "Magpie-Multilingual.ZH-CN.Long",
            "Magpie-Multilingual.ZH-CN.North",
      ]
   }
}

$ curl -sS http://localhost:9000/v1/audio/synthesize --fail-with-body \
   -F language=zh-CN  \
   -F text="說書,相聲這種東西,人靠一張嘴,通過語言的結構,把看官聽眾吸引到故事里面。在演出的時候要求你身上的每個動作,都必須要有含義。" \
   -F voice=Magpie-Multilingual.ZH-CN.Mia \
   --output output.wav
$ curl -sS http://localhost:9000/v1/audio/synthesize_online --fail-with-body \
   -F language=zh-CN  \
   -F text="說書,相聲這種東西,人靠一張嘴,通過語言的結構,把看官聽眾吸引到故事里面。在演出的時候要求你身上的每個動作,都必須要有含義。" \
   -F voice=Magpie-Multilingual.ZH-CN.Ray \
   -F sample_rate_hz=22050 \
   --output output.raw
$ sudo apt update
$ sudo apt install -y sox
$ sox -b 16 -e signed -c 1 -r 22050 output.raw output.wav

Available Voices
Magpie-Multilingual.ZH-CN.Aria
Magpie-Multilingual.ZH-CN.Diego
Magpie-Multilingual.ZH-CN.HouZhen
Magpie-Multilingual.ZH-CN.Isabela
Magpie-Multilingual.ZH-CN.Long
Magpie-Multilingual.ZH-CN.Louise
Magpie-Multilingual.ZH-CN.Mia
Magpie-Multilingual.ZH-CN.North
Magpie-Multilingual.ZH-CN.Pascal
Magpie-Multilingual.ZH-CN.Ray
Magpie-Multilingual.ZH-CN.Siwei

$ docker stop $CONTAINER_ID
$ docker rm $CONTAINER_ID

DGX Spark 安裝使用 NIM

參考文件 https://build.nvidia.com/spark/nim-llm/overview

下載 ngc
$ wget --content-disposition \
https://api.ngc.nvidia.com/v2/resources/nvidia/ngc-apps/ngc_cli/versions/4.11.1/files/ngccli_arm64.zip \
-O ngccli_arm64.zip && unzip ngccli_arm64.zip
$ find ngc-cli/ -type f -exec md5sum {} + | LC_ALL=C sort | md5sum -c ngc-cli.md5
$ sha256sum ngccli_arm64.zip
9c285ef8250c30c21e70a836700121945b296a8441005b829179bde6106ce6d1
$ chmod u+x ngc-cli/ngc
$ echo "export PATH=\"\$PATH:$(pwd)/ngc-cli\"" >> ~/.bash_profile && source ~/.bash_profile

$ ngc config set
Enter API key [no-apikey]. Choices: [<VALID_APIKEY>, 'no-apikey']: 
Enter CLI output format type [ascii]. Choices: ['ascii', 'csv', 'json']: 
Validating configuration...
Successfully validated configuration.
Saving configuration...
Successfully saved NGC configuration to /home/spark/.ngc/config
$ docker login nvcr.io
Username: $oauthtoken
Password: Y6NWM0NjYzYjYtMzczMy00MjVkLTg1NWQtZTE2MDNmZTAxNDBj

$ newgrp docker
$ export NGC_API_KEY="Y6NWM0NjYzYjYtMzczMy00MjVkLTg1NWQtZTE2MDNmZTAxNDBj"
$ echo "$NGC_API_KEY" | docker login nvcr.io --username '$oauthtoken' --password-stdin

$ export CONTAINER_NAME="nim-llm-demo"
$ export IMG_NAME="nvcr.io/nim/meta/llama-3.1-8b-instruct-dgx-spark:latest"
$ export LOCAL_NIM_CACHE=$(pwd)/cache/nim
$ export LOCAL_NIM_WORKSPACE=~/workspace
$ mkdir -p "$LOCAL_NIM_WORKSPACE"
$ chmod -R a+w "$LOCAL_NIM_WORKSPACE"
$ mkdir -p "$LOCAL_NIM_CACHE"
$ chmod -R a+w "$LOCAL_NIM_CACHE"

$ docker run -it --rm --name=$CONTAINER_NAME \
  --gpus all \
  --shm-size=16GB \
  -e NGC_API_KEY=$NGC_API_KEY \
  -v "$LOCAL_NIM_CACHE:/opt/nim/.cache" \
  -v "$LOCAL_NIM_WORKSPACE:/opt/nim/workspace" \
  -p 8000:8000 \
  $IMG_NAME

$ curl -X 'POST' \
    'http://0.0.0.0:8000/v1/chat/completions' \
    -H 'accept: application/json' \
    -H 'Content-Type: application/json' \
    -d '{
      "model": "meta/llama-3.1-8b-instruct",
      "messages": [
        {
          "role":"system",
          "content":"detailed thinking on"
        },
        {
          "role":"user",
          "content":"Can you write me a song?"
        }
      ],
      "top_p": 1,
      "n": 1,
      "max_tokens": 15,
      "frequency_penalty": 1.0,
      "stop": ["hello"]

    }'
    
$ docker stop $CONTAINER_NAME
$ docker rm $CONTAINER_NAME

2026年2月2日 星期一

DGX Spark 安裝使用 LocalAI

參考 https://localai.io/

$ mkdir models backends

$ docker run -ti --gpus all --name local-ai \
-p 8080:8080 \
-v $PWD/models:/models \
-v $PWD/backends:/backends \
-e DEBUG=true \
localai/localai:latest-nvidia-l4t-arm64-cuda-13 \
--models-path /models \
--context-size 700 \
--threads 4 

開啟網站 http://192.168.0.108:8080/
右上 Settings/Backends
安裝 whisper, qwen-tss, piper
右上 Settings/Models
安裝 qwen3-tts-1.7b-custom-voice, voice-zh_CN-huayan-medium, whisper-medium

https://huggingface.co/Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice 可查詢到 speaker

$ docker exec -it local-ai sh

$ curl http://192.168.0.108:8080/v1/audio/transcriptions \
  -H "Content-Type: multipart/form-data" \
  -F file="@/home/mark/Data/Whisper/speaches/aaa.mp3" \
  -F model="whisper-1"

$ curl http://192.168.0.108:8080/v1/audio/speech \
  -H "Content-Type: application/json" \
  -d '{
  "backend": "piper",
  "input": "這是一段來自 LocalAI 的測試語音。",
  "model": "voice-zh_CN-huayan-medium",
  "response_format": "wav"
  }' \
  --output test_audio.wav

$ curl http://192.168.0.108:8080/v1/audio/speech \
  -H "Content-Type: application/json" \
  -d '{
  "backend": "qwen-tss",
  "input": "這是一段來自 LocalAI 的測試語音。",
  "model": "qwen3-tts-1.7b-custom-voice",
  "response_format": "wav"
  }' \
  --output test_audio.wav

$ curl http://192.168.0.108:8080/v1/completions \
  -H "Content-Type: application/json" \
  -d '{"model": "Qwen3-4B.Q4_K_M.gguf",
     "prompt": "A long time ago in a galaxy far, far away",
     "temperature": 0.7
   }'


================
以下是嘗試使用 docker build image, 的失敗過程

$ mkdir -p localai/models
$ cd localai

直接下載模型
$ cat <<EOF > models/breeze.yaml
name: "whisper-1"
backend: "whisper"
parameters:
  model: "MediaTek-Research/Breeze-ASR-25"
EOF

預先下載模型
$ vi models/breeze.yaml
name: "whisper-1"
backend: "faster-whisper"
parameters:
  # 這裡要寫容器內的路徑
  model: "/models/Breeze-ASR-25"

不可使用
$ docker run -d --name local-ai \
  --gpus all \
  -p 8080:8080 \
  -v $(pwd)/models:/build/models:ro \
  -v /mnt/models:/models:ro \
  localai/localai:latest-nvidia-l4t-arm64-cuda-13
會出現下列錯誤
$ curl http://192.168.0.108:8080/v1/audio/transcriptions \
>   -H "Content-Type: multipart/form-data" \
>   -F file="@/mnt/Data/Whisper/speaches/aaa.mp3" \
>   -F model="whisper-1"
{"error":{"code":500,"message":"failed to load model with internal loader: backend not found: whisper","type":""}}

$ git clone https://github.com/mudler/LocalAI
$ cd LocalAI
$ docker build --build-arg SKIP_DRIVERS=false \
--build-arg BUILD_TYPE=cublas \
--build-arg CUDA_MAJOR_VERSION=13 \
--build-arg CUDA_MINOR_VERSION=0 \
--build-arg BASE_IMAGE=ubuntu:24.04 \
--build-arg IMAGE_TYPE=aio \
-t quay.io/go-skynet/local-ai:master-nvidia-l4t-arm64-cuda-13-aio .

$ docker run -d --name local-ai \
  --gpus all \
  -p 8080:8080 \
  -v $(pwd)/models:/build/models:ro \
  -v /mnt/models:/models:ro \
  -e EXTERNAL_GRPC_BACKENDS="faster-whisper:/build/backend/python/faster-whisper/backend.py" \
  quay.io/go-skynet/local-ai:master-nvidia-l4t-arm64-cuda-13-aio

$ docker build --build-arg SKIP_DRIVERS=true \
--build-arg BUILD_TYPE=cublas \
--build-arg CUDA_MAJOR_VERSION=13 \
--build-arg CUDA_MINOR_VERSION=0 \
--build-arg BASE_IMAGE=nvidia/cuda:13.0.0-devel-ubuntu24.04 \
--build-arg IMAGE_TYPE=core \
-t local-ai-cuda13:latest .

$ docker build \
--build-arg BUILD_TYPE=cublas \
--build-arg BASE_IMAGE=nvidia/cuda:13.0.0-devel-ubuntu24.04 \
--build-arg UBUNTU_VERSION=2404 \
--build-arg TARGETARCH=arm64 \
--build-arg BACKEND=faster-whisper \
-t local-ai-faster-whisper-cuda13:latest \
-f backend/Dockerfile.python .

$ docker build \
--build-arg BUILD_TYPE=cublas \
--build-arg BASE_IMAGE=nvidia/cuda:13.0.0-devel-ubuntu24.04 \
--build-arg CUDA_MAJOR_VERSION=13 \
--build-arg CUDA_MINOR_VERSION=0 \
--build-arg UBUNTU_VERSION=2404 \
--build-arg TARGETARCH=arm64 \
--build-arg BACKEND=piper \
-t local-ai-piper-cuda13:latest \
-f backend/Dockerfile.golang .

$ docker build \
--build-arg BUILD_TYPE=cublas \
--build-arg BASE_IMAGE=nvidia/cuda:13.0.0-devel-ubuntu24.04 \
--build-arg CUDA_MAJOR_VERSION=13 \
--build-arg CUDA_MINOR_VERSION=0 \
--build-arg UBUNTU_VERSION=2404 \
--build-arg TARGETARCH=arm64 \
--build-arg BACKEND=vllm \
-t local-ai-vllm-omni-cuda13:latest \
-f backend/Dockerfile.python .

# 確保你在 LocalAI 根目錄,且 backend/python 下已有你的 kokoro 實作
$ docker build \
--build-arg BUILD_TYPE=cublas \
--build-arg BASE_IMAGE=nvidia/cuda:13.0.0-devel-ubuntu24.04 \
--build-arg UBUNTU_VERSION=2404 \
--build-arg CUDA_MAJOR_VERSION=13 \
--build-arg TARGETARCH=arm64 \
--build-arg BACKEND=kokoro \
-t local-ai-kokoro-cuda13:latest \
-f backend/Dockerfile.python .

$ vi docker-compose.yml
version: '3.8'
services:
  asr-service:
    image: local-ai-faster-whisper-cuda13:latest
    container_name: faster-whisper-backend
    networks:
      - ai-network
    volumes:
      - ./models:/build/models:ro
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    restart: always
  tts-service:
    image: local-ai-piper-cuda13:latest
    container_name: tts-backend
    networks:
      - ai-network
    volumes:
      - ./models:/build/models:ro
  kokoro-service:
    image: local-ai-kokoro-cuda13:latest
    container_name: kokoro-backend
    networks:
      - ai-network
    volumes:
      - ./models:/build/models:ro
    command: ["/usr/bin/python3", "/build/backend/python/kokoro/kokoro.py"] # 範例路徑
    deploy:
      resources:
        reservations:
          devices: [{driver: nvidia, count: all, capabilities: [gpu]}]
  vllm-omni:
    image: local-ai-vllm-omni-cuda13:latest
    container_name: vllm-backend
    restart: always
    networks:
      - ai-network
    volumes:
      - ./models:/build/models:ro
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all # DGX 環境建議指定顯卡,例如 "device=0,1"
              capabilities: [gpu]
  localai:
    image: local-ai-cuda13:latest
    container_name: localai-api
    depends_on:
      - asr-service:
      - tts-service
      - vllm-omni
      - kokoro-service
    networks:
      - ai-network
    ports:
      - "8080:8080"
    volumes:
      - ./models:/build/models:ro
      - /mnt/models:/models:ro
    environment:
      - DEBUG=true
      - EXTERNAL_GRPC_BACKENDS=vllm:vllm-omni:9000,faster-whisper:asr-service:9000,piper:tts-service:9000,kokoro:kokoro-service:9000
    restart: always
networks:
  ai-network:
    driver: bridge

$ docker compose -f docker-compose.yml up -d
$ docker compose -f docker-compose.yml logs -f
$ docker compose -f docker-compose.yaml down

$ curl http://192.168.0.108:8080/v1/audio/transcriptions \
  -H "Content-Type: multipart/form-data" \
  -F file="@/home/mark/Data/Whisper/speaches/aaa.mp3" \
  -F model="whisper-1"

$ vi models/piper.yaml
name: "tts-1"
backend: "piper"
parameters:
  model: "/models/piper-zh_CN-huayan-medium/model.onnx"

$ vi models/vllm-omni.yaml
name: "vllm-omni"
backend: "vllm"
parameters:
  model: "/models/llama-3.2-vision"
  extra_args:
    - "--dtype"
    - "bfloat16"
    - "--limit-mm-per-prompt" # 限制單個提示的多模態輸入數量
    - "image=1,video=0"
    - "--max-model-len"
    - "4096"
    - "--gpu-memory-utilization"
    - "0.8"
    
$ vi models/kokoro.yaml
name: "kokoro-tts"
# 這裡直接指定為子目錄名稱
backend: "kokoro" 
parameters:
  # 指向您下載的 Kokoro ONNX 模型路徑
  model: "kokoro-v1.0.onnx" 
# 如果模型需要特定的聲音風格檔,通常在環境變數或參數中指定
environment:
  KOKORO_VOICES_PATH: "/build/models/kokoro/voices.bin"


git clone https://github.com/mudler/LocalAI

cd LocalAI

$ docker build \
--build-arg SKIP_DRIVERS=false \
--build-arg BUILD_TYPE=cublas \
--build-arg CUDA_MAJOR_VERSION=13 \
--build-arg CUDA_MINOR_VERSION=0 \
--build-arg BASE_IMAGE=ubuntu:24.04 \
--build-arg IMAGE_TYPE=core \
-t quay.io/go-skynet/local-ai:master-nvidia-l4t-arm64-cuda-13-core .

$ docker run -ti --gpus all --name local-ai \
-p 8080:8080 \
-v $PWD/models:/models \
-v $PWD/backends:/backends \
-e DEBUG=true \
quay.io/go-skynet/local-ai:master-nvidia-l4t-arm64-cuda-13-core \
--models-path /models \
--context-size 700 \
--threads 4 


$ docker build \
--build-arg BUILD_TYPE=cublas \
--build-arg BASE_IMAGE=nvidia/cuda:13.0.0-devel-ubuntu24.04 \
--build-arg CUDA_MAJOR_VERSION=13 \
--build-arg CUDA_MINOR_VERSION=0 \
--build-arg UBUNTU_VERSION=2404 \
--build-arg TARGETARCH=arm64 \
--build-arg BACKEND=qwen-tts \
-t local-ai-qwen-tts-cuda13:latest \
-f backend/Dockerfile.python .

$ vi docker-compose.yml
version: "3.9"
services:
  localai:
    image: localai/localai:latest
    container_name: localai
    runtime: nvidia
    ports:
      - "8080:8080"
    volumes:
      - ./models:/models
      - ./backends:/build/backend
    environment:
      # 👇 多個 backend image,用逗號分隔
      LOCALAI_BACKEND_IMAGE=local-ai-qwen-asr-cuda13,local-ai-qwen-tts-cuda13

      # 常見 GPU 設定
      NVIDIA_VISIBLE_DEVICES=all
      NVIDIA_DRIVER_CAPABILITIES=compute,utility


$ docker create --name tmp-qwen local-ai-qwen-tts-cuda13:latest /bin/true
$ mkdir qwen-tss-rootfs
$ docker export tmp-qwen | tar -xvf - -C ./qwen-tss-rootfs
$ docker rm tmp-qwen

cd qwen-tss-rootfs
mv venv venv.bak
python3 -m venv venv
source venv/bin/activate
which python
# 應該是 .../qwen-asr-rootfs/venv/bin/python
pip --version
# 應該指向 venv 內
pip install grpcio-tools==1.71.0 grpcio==1.71.0
python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. backend.proto

DGX Spark 之溫度

找不到可以控制風扇的方式,目前只能加強通風散熱,再來就是降頻了

$ nvidia-smi -q -d CLOCK
查詢 時脈
$ sudo nvidia-smi -lgc 1200,2400
固定 GPU 時脈
$ sudo nvidia-smi -rgc
回復原始設定

下面命令失效
$ sudo nvidia-smi -pl 350
Changing power management limit is not supported in current scope for GPU: 0000000F:01:00.0.
All done.
$ sudo nvidia-smi -gtt 80
GPU Target Temperature Threshold not supported for GPU 0000000F:01:00.0.
Treating as warning and moving on.
All done.

$ sudo nvidia-settings -a "[gpu:0]/GPUFanControlState=1"
$ sudo nvidia-settings -a "[fan:0]/GPUTargetFanSpeed=85"
ERROR: Error resolving target specification 'fan:0' (No targets match target
       specification), specified in assignment '[fan:0]/GPUTargetFanSpeed=85'.

$ sudo cpupower frequency-set -g performance
$ sudo cpupower frequency-set -u 3.5GHz

2026年1月31日 星期六

DGX Spark Manual System Updates

sudo apt update
sudo apt dist-upgrade
sudo fwupdmgr refresh
sudo fwupdmgr upgrade
sudo reboot

2026年1月6日 星期二

vscode 開發 python, 使用 uv, git

VS Code 快捷鍵
Ctrl + Shift + P(命令面板)
Win + ↑(開發環境最大化)
Ctrl + `(開啟終端機)

開發 python
1. Remote-SSH 連 Ubuntu
2. mkdir my_python_project; cd my_python_project
3. python3 -m venv venv
4. source venv/bin/activate
5. Ctrl + Shift + P(命令面板) 輸入 Python: Select Interpreter, 選擇 ./venv/bin/python
6. 開始寫 main.py
7. pip install request
8. pip freeze > requirements.txt

使用 uv 開發 python
1. Ctrl + `(開啟終端機)
2a. mkdir my_python_project; cd my_python_project
2b. uv init my_python_project; cd my_python_project
3. uv venv
4. source .venv/bin/activate
5. Ctrl + Shift + P(命令面板) 輸入 Python: Select Interpreter, 選擇 ./venv/bin/python
6. 開始寫 main.py
7. uv add requests
8. uv pip install -e .

再加上 git
1. git init
2. cat > .gitignore <<EOS
.venv/
__pycache__/
*.pyc
.env
EOS
3. git add .
4. git commit -m "Initial commit"
5. 在 GitHub 建立 Repository
5a. 打開 GitHub 網站
5b. 點 New repository
5c. Repository name:和資料夾同名(建議)
5d. 不要勾 README / .gitignore / license
5e. 建立 Repository
6. 從 VS Code / Ubuntu 推到 GitHub
git branch -M master
git remote add origin https://github.com/你的帳號/專案名.git
git push -u origin master
上述命令執行後,注意視窗上方要輸入密碼
7. 改程式後
git add .
git commit -m "說明你改了什麼"
git push
8. 在別的地方更新過
git pull
9. VS Code 介面操作
VS Code 左邊的 Source Control
Stage(+)
Commit
Push / Pull
10a. 查詢本地專案設定
git config user.name
git config user.email
10b. 查全域設定
git config --global user.name
git config --global user.email
10c. 設定 Git 身分
git config --global user.name "你的名字"
git config --global user.email "你的 GitHub Email"
11. 查看所有遠端
git remote -v
12. 查看某個 remote 詳細資訊
git remote show origin
13. 常見遠端名稱
origin 原始遠端,通常是主 GitHub repository
upstream 當你 fork 別人的 repo,用來指原始 repo
backup 備份用遠端,例如 GitLab、私有伺服器