Skip to main content

Jetson Mate

note

この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues

Jetson Mate 入門ガイド

Jetson Mateは、最大4つのNvidia Jetson Nano/NX SoMを搭載できるキャリアボードです。オンボードには5ポートギガビットスイッチがあり、4つのSoMが相互に通信可能です。3つの周辺SoMは個別に電源をオンまたはオフにすることができます。Jetson Nano SoMには65W 2ポートPD充電器、Jetson NX SoMには90W 2ポートPD充電器、そして1本のイーサネットケーブルを使用することで、開発者は簡単に独自のJetsonクラスターを構築できます。

特徴

  • 簡単に構築および設定可能
  • 強力かつコンパクト
  • 専用ケースとファン付き

仕様

仕様--
電源65W PD
寸法110mm x 110mm
オンボードスイッチMicrochip KSZ9896CTXC

ハードウェア概要

入門ガイド

!!!注意 このガイドでは、ホストPCにUbuntu 18.04 LTSがインストールされています。現在、NVIDIA SDK Managerを使用したOSのフラッシュはUbuntu 20.04ではサポートされていません。そのため、Ubuntu 18.04または16.04を使用してください。また、仮想マシン上でUbuntuを実行している場合は、VMware Workstation Playerを使用することをお勧めします。これはテスト済みです。Oracle VM VirtualBoxはOSのフラッシュに失敗するため、使用を推奨しません。

必要なハードウェア

  • Jetson Mate
  • Jetson Nano/ NX モジュール
  • Micro - USB ケーブル
  • 65Wまたは90Wの充電アダプターとUSB Type-Cケーブル
  • Ubuntu 18.04または16.04がインストールされたホストPC

ハードウェアセットアップ

  • ステップ1. Jetson Nano/ NXモジュールをマスターノードに挿入します

pir

  • ステップ2. Jetson MateからPCにmicro-USBケーブルを接続します

pir

  • ステップ3. リカバリモードのためにBOOTとGNDピンの間にジャンパーを接続します

pir

  • ステップ4. Jetson Mateを電源アダプターに接続し、WAKEボタンを押してJetson Mateをオンにします

  • ステップ5. Jetson Mateがオンになった後、ジャンパーを取り外します

  • ステップ6. ホストPCでターミナルウィンドウを開き、以下を実行します

lsusb

pir

出力に0955:7f21 NVidia Corp.が含まれている場合、Jetson Mateはリカバリモードに入っています

ソフトウェアセットアップ

開発キットのmicro-SDカードを使用している場合は、Jetson NanoのこのガイドJetson Nano 2GBのこのガイド、およびJetson Xavier NXのこのガイドに従ってシステムをインストールおよび設定することをお勧めします。

eMMCストレージを搭載したモジュールを使用している場合は、NVIDIAの公式SDK Managerを使用し、以下の手順に従ってください。

注意: ホストPCのOSに応じて適切なバージョンを選択してください。このガイドではホストPCがUbuntu 18.04を使用しているため、Ubuntuを選択します。

pir

  • ステップ2. NVIDIA Developer Program Membershipにアカウントを作成するかログインします

  • ステップ3. NVIDIA SDK Managerをインストールします

注意: ダウンロードしたファイルをダブルクリックしてインストールします

  • ステップ4. NVIDIA SDK Managerを開くと、接続されたJetson Nano/ NXモジュールが自動的に検出されます

pir

  • ステップ5. 接続されたモジュールを選択します

  • ステップ6. 設定ウィンドウで、ホストマシンチェック解除します。

pir

注意: ここではDeepStream SDKもチェック解除されています。ただし、これをインストールする予定がある場合はチェックすることができます。ただし、eMMCモジュールの16GBではこのSDKをインストールするには十分ではありません。

  • ステップ7. CONTINUE TO STEP 02をクリックします

  • ステップ8. 必要なコンポーネントを確認し、ライセンス契約の条件に同意しますをチェックします

pir

注意: Jetson OSのみをインストールしたい場合は、Jetson SDK Componentsをチェック解除することができます

  • ステップ9. CONTINUE TO STEP 03をクリックします

  • ステップ10. 以下のエラーメッセージが表示されたら、Createをクリックします

pir

  • ステップ11. ダウンロードとフラッシュを開始します

pir

  • ステップ12. OSのダウンロードとフラッシュが完了すると、以下の出力が表示されます

pir

  • ステップ 13. Jetson Mate を電源オフにします。

  • ステップ 14. ホスト PC でターミナルウィンドウを開き、シリアルターミナルアプリケーションである minicom をインストールします。

sudo apt update
sudo apt install minicom

注意: このアプリケーションを使用して、ホスト PC と Jetson Mate の間でシリアル接続を確立します。

  • ステップ 15. Jetson Mate を PC に micro-USB ケーブルで接続した状態で電源をオンにし、以下のコマンドを入力して接続されたシリアルポートを確認します。
dmesg | grep tty

pir

注意: ここでポート名は ttyACM0 です。

  • ステップ 16. minicom を使用して Jetson Mate に接続します。
sudo minicom -b 9600 -D /dev/ttyACM0

注意: -b はボーレート、-D はデバイスを指定します。

  • ステップ 17. Jetson OS の 初期設定 を進めます。

pir

  • ステップ 18. 設定が完了したら、SDK Manager ウィンドウに戻り、Jetson Mate 用に設定した ユーザー名とパスワード を入力して Install をクリックします。

pir

注意: 初期設定で設定したユーザー名とパスワードを使用してください。

これで SDK コンポーネントのダウンロードとインストールが開始されます。

pir

SDK Manager が必要なコンポーネントを正常にダウンロードおよびインストールすると、以下の出力が表示されます。

pir

  • ステップ 19. 残りの Jetson Nano/ NX モジュールをすべてフラッシュします。

注意: すべてのモジュールはマスターノードにインストールされている場合のみフラッシュ可能です。したがって、モジュールを一つずつマスターノードでフラッシュして設定する必要があります。

クラスターを起動する

  • ステップ 1. ルーターから Jetson Mate にイーサネットケーブルを接続します。

注意: PC と Jetson Mate が同じルーターに接続されていることを確認してください。

  • ステップ 2. micro-USB をホスト PC に接続した状態で、前述の方法で minicom を使用して Jetson Mate にアクセスし、以下のコマンドを入力して Jetson Mate に接続されているモジュールの IP アドレスを取得します。
ifconfig
  • ステップ 3. ホスト PC のターミナルで以下を入力して SSH 接続を確立します。

注意: user を Jetson Nano/ NX のユーザー名に置き換え、192.xxx.xx.xx を Jetson Nano/ NX の IP アドレスに置き換えてください。

注意: IP アドレスの代わりにホスト名を使用してノードに接続することもできます。

Jetson Mate を使用して Kubernetes クラスターを構築する

Kubernetes は、クラウドネイティブを前提として設計されたエンタープライズグレードのコンテナオーケストレーションシステムです。クラウドコンテナプラットフォームのデファクトスタンダードとして成長し、コンテナネイティブ仮想化やサーバーレスコンピューティングなどの新技術を取り入れながら拡大を続けています。

Kubernetes は、パブリッククラウドおよびプライベートクラウド環境で、エッジのマイクロスケールから大規模スケールまで、コンテナやその他を管理します。「自宅でのプライベートクラウド」プロジェクトに最適な選択肢であり、堅牢なコンテナオーケストレーションを提供するとともに、需要が高く、クラウドに統合された技術について学ぶ機会を提供します。その名前は「クラウドコンピューティング」とほぼ同義語と言えるほどです。

このチュートリアルでは、1つのマスターと3つのワーカーを使用します。以下の手順では、masterworker、または worker and master のいずれでソフトウェアが実行されるかを太字で示します。

Docker の設定

worker and master、Docker ランタイムをデフォルトで "nvidia" を使用するように設定する必要があります。 ファイル /etc/docker/daemon.json を修正します。

{
"default-runtime" : "nvidia",
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
}
}

Docker デーモンを再起動します。

sudo systemctl daemon-reload && sudo systemctl restart docker

Docker のデフォルトランタイムが NVIDIA であることを確認します。

sudo docker info | grep -i runtime

以下はサンプル出力です。

Runtimes: nvidia runc
Default Runtime: nvidia

Kubernetes のインストール

worker and master、kubelet、kubeadm、kubectl をインストールします。

sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

# Kubernetes リポジトリを追加
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt update && sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

スワップを無効化します。再起動するたびにこれをオフにする必要があります。

sudo swapoff -a

以下の手順で使用するために deviceQuery をコンパイルします。

cd /usr/local/cuda/samples/1_Utilities/deviceQuery && sudo make 
cd

Kubernetes の設定

master、クラスターを初期化します。

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

出力には、クラスターにポッドネットワークをデプロイするためのコマンドや、クラスターに参加するためのコマンドが表示されます。すべてが成功すると、出力の最後に以下のようなメッセージが表示されます。

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.2.114:6443 --token zqqoy7.9oi8dpkfmqkop2p5 \
--discovery-token-ca-cert-hash sha256:71270ea137214422221319c1bdb9ba6d4b76abfa2506753703ed654a90c4982b

出力指示に従い、以下のコマンドを実行してください:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

コントロールプレーンノードにポッドネットワークアドオンをインストールします。ポッドネットワークアドオンとして Calico を使用します:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

中国国内にいる場合は、以下を使用してください: kubectl apply -f https://gitee.com/wj204811/wj204811/raw/master/kube-flannel.yml

すべてのポッドが起動していることを確認してください:

kubectl get pods --all-namespaces

以下はサンプル出力です:

NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
kube-system kube-flannel-ds-arm64-gz28t 1/1 Running 0 2m8s
kube-system coredns-5c98db65d4-d4kgh 1/1 Running 0 9m8s
kube-system coredns-5c98db65d4-h6x8m 1/1 Running 0 9m8s
kube-system etcd-#yourhost 1/1 Running 0 8m25s
kube-system kube-apiserver-#yourhost 1/1 Running 0 8m7s
kube-system kube-controller-manager-#yourhost 1/1 Running 0 8m3s
kube-system kube-proxy-6sh42 1/1 Running 0 9m7s
kube-system kube-scheduler-#yourhost 1/1 Running 0 8m26s

ワーカー、計算ノードをクラスターに参加させます。計算ノードを追加するには、コントロールプレーンノードを初期化するために実行した kubeadm init コマンドの最後に提供される kubeadm join コマンドを実行するだけです。他の Jetson Nano をクラスターに参加させるには、ホストにログインして以下のコマンドを実行してください:

クラスター - トークンと ca-cert-hash は異なります
$ sudo kubeadm join 192.168.2.114:6443 --token zqqoy7.9oi8dpkfmqkop2p5 \
--discovery-token-ca-cert-hash sha256:71270ea137214422221319c1bdb9ba6d4b76abfa2506753703ed654a90c4982b

マスター、各ノードで参加プロセスを完了したら、以下のコマンドの出力で新しいノードを確認できるはずです:

kubectl get nodes

以下はサンプル出力です:

ワーカー用にノードをタグ付けします。

kubectl label node se2 node-role.kubernetes.io/worker=worker
kubectl label node se3 node-role.kubernetes.io/worker=worker
kubectl label node se4 node-role.kubernetes.io/worker=worker

EGX 2.0 インストールの成功を検証する

ワーカーとマスター、EGX スタックが期待通りに動作することを検証するには、以下の手順に従ってポッド YAML ファイルを作成します。kubectl get pods コマンドがポッドのステータスを Completed と表示した場合、インストールは成功しています。また、cuda-samples.yaml ファイルの実行結果が Result=PASS と表示されることを確認してください。

ポッド YAML ファイルを作成し、以下の内容を追加して samples.yaml として保存します:

nano cuda-samples.yaml

以下の内容を追加し、cuda-samples.yaml として保存します:

apiVersion: v1
kind: Pod
metadata:
name: nvidia-l4t-base
spec:
restartPolicy: OnFailure
containers:
- name: nvidia-l4t-base
image: "nvcr.io/nvidia/l4t-base:r32.4.2"
args:
- /usr/local/cuda/samples/1_Utilities/deviceQuery/deviceQuery

サンプル GPU ポッドを作成します:

sudo kubectl apply -f cuda-samples.yaml

サンプルポッドが作成されたか確認します:

kubectl get pods

CUDA ライブラリをサポートするサンプルポッドのログを検証します:

kubectl logs nvidia-l4t-base

以下はサンプル出力です:

/usr/local/cuda/samples/1_Utilities/deviceQuery/deviceQuery Starting...
CUDA Device Query (Runtime API) version (CUDART static linking)
Detected 1 CUDA Capable device(s)

Device 0: "Xavier"
CUDA Driver Version / Runtime Version 10.2 / 10.2
CUDA Capability Major/Minor version number: 7.2
Total amount of global memory: 7764 MBytes (8140709888 bytes)
( 6) Multiprocessors, ( 64) CUDA Cores/MP: 384 CUDA Cores
GPU Max Clock rate: 1109 MHz (1.11 GHz)
Memory Clock rate: 1109 Mhz
Memory Bus Width: 256-bit
L2 Cache Size: 524288 bytes
Maximum Texture Dimension Size (x,y,z) 1D=(131072), 2D=(131072, 65536), 3D=(16384, 16384, 16384)
Maximum Layered 1D Texture Size, (num) layers 1D=(32768), 2048 layers
Maximum Layered 2D Texture Size, (num) layers 2D=(32768, 32768), 2048 layers
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 49152 bytes
Total number of registers available per block: 65536
Warp size: 32
Maximum number of threads per multiprocessor: 2048
Maximum number of threads per block: 1024
Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535)
Maximum memory pitch: 2147483647 bytes
Texture alignment: 512 bytes
Concurrent copy and kernel execution: Yes with 1 copy engine(s)
Run time limit on kernels: No
Integrated GPU sharing Host Memory: Yes
Support host page-locked memory mapping: Yes
Alignment requirement for Surfaces: Yes
Device has ECC support: Disabled
Device supports Unified Addressing (UVA): Yes
Device supports Compute Preemption: Yes
Supports Cooperative Kernel Launch: Yes
Supports MultiDevice Co-op Kernel Launch: Yes
Device PCI Domain ID / Bus ID / location ID: 0 / 0 / 0
Compute Mode:
< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 10.2, CUDA Runtime Version = 10.2, NumDevs = 1
Result = PASS

Kubernetes 上で Jupyter を設定する

worker と master、以下の内容を追加し、jupyter.yaml として保存してください:

nano jupyter.yaml

apiVersion: apps/v1 # バージョン 1.9.0 より前の場合は apps/v1beta2 を使用
kind: Deployment
metadata:
name: cluster-deployment
spec:
selector:
matchLabels:
app: cluster
replicas: 3 # デプロイメントにテンプレートに一致する 3 つのポッドを実行するよう指示
template:
metadata:
labels:
app: cluster
spec:
containers:
- name: nginx
image: helmuthva/jetson-nano-jupyter:latest
ports:
- containerPort: 8888

Jupyter GPU ポッドを作成します:

kubectl apply -f jupyter.yml

Jupyter ポッドが作成され、実行中であるか確認します:

kubectl get pod

外部ロードバランサーを作成します:

kubectl expose deployment cluster-deployment --port=8888 --type=LoadBalancer 

ここで、Jupyter クラスターがポート 31262 で外部アクセス可能であることが確認できます。そのため、http://se1.local:31262 を使用して Jupyter にアクセスします。

以下のコードを使用して利用可能な GPU の数を確認できます。今回は 3 つのワーカーしかないため、利用可能な GPU の数は 3 です。

from tensorflow.python.client import device_lib

def get_available_gpus():
local_device_protos = device_lib.list_local_devices()
return [x.name for x in local_device_protos if x.device_type == 'GPU']

get_available_gpus()

これで準備完了です。お楽しみください!

リソース

技術サポート & 製品ディスカッション

弊社製品をお選びいただきありがとうございます!製品をスムーズにご利用いただけるよう、さまざまなサポートをご用意しています。お客様のご希望やニーズに応じた複数のコミュニケーションチャネルをご利用いただけます。

Loading Comments...