Nvidia Jetson AGX Orin 初体验
一、開箱
Nvidia Jetson AGX Orin是今年Nvidia推出的唯一的開發套件,相比Jetson Nano 472GFLOP算力、Jetson Xaiver 32TOPS(INT8)算力,它的算力達到了200 TOPS左右。也就是說,幾乎相當于目前主流設備的8-10倍的算力。這就讓張小白有點動心了。于是,張小白天天啃包子省吃儉用,攢下了一臺設備的價錢,并火速將設備拿到了手。
說實話,拿到這樣的箱子著實有點害怕,畢竟里面的東西不便宜。然而,打開包裝,并進行消毒之后:
這么方方正正的盒子,確實讓人有點放心了。
我們四周看一看:
側面和底面都有封條。
有一側寫著設備的各種指標。
于是張小白用裁紙刀開箱:
映入眼簾的是個像音響一樣的東西。
拿出來一看:
銀灰色的機身,里面的大風扇隱約可見。
這是右面——正確的一面(Right View),對應說明書:
分別是 電源鍵(Power),強制恢復鍵(Force Recovery)和重置鍵(Reset)。還有個TF卡的插槽。
右面旁邊的一面叫背面(Back View):
對比說明書:
分別是:
(1)USB Type-C,這個接口是接電源的地方。
(2)DC Power是很奇怪的接口,好像目前并沒有接頭能插進去。
(3)有線網口
(4)上下錯落著2個USB 3.2的接口,張小白打算用來接鍵盤和鼠標
(5)DisplayPort,是目前唯一的顯示器接口
(6)Micro USB的接口,大概是可以用作串口吧。
背面旁邊的一面看起啥也沒有:
對比說明書:
你可以把它輕輕掀開:
有一個PCIe的接口,殼子上還有2根WiFI天線,說明它是自帶無線網卡的。
再轉過去,就到了正面(Front View):
左邊是個Type-C接口,中間是40Pin接口,右邊是兩個USB3.2的接口。
我們再悄悄看看底面:
有個接M2的硬盤接口,有2個攝像頭的接口。右下角應該是前面看到的TF卡槽。這塊板子好像還是Made in China。
我們把裝Orin設備的盒子拿出去后:
下面還有個附件的盒子:
打開看看:
上面是說明書(剛才拍過了)和電源適配器,下面是幾股線纜:
有USB轉Type=C的線,估計可以用接電腦。
下面是三根電源線:
根據電源插頭的不同,估計是美標,英標插頭之類的。反正有中國的插頭就行:
AC電源適配器,也是中國制造。
電源適配器的另一頭是Type-C插頭,所以應該是接上前面Right View左上角那個Type-C的接口。
DisplayPort的接口有點奇怪:
好在張小白的小米曲面屏顯示器有這個接口,張小白也有這跟DP線:
開箱到此結束。
二、開機
張小白打開說明書提供的鏈接:
只好求助于Nvidia的專家,獲得了這個地址:?https://developer.nvidia.com/embedded/learn/get-started-jetson-agx-orin-devkit
那就根據這個鏈接來Getting Started吧!
先把各種線接好:
(1)DP接口連顯示器;
(2)電源線連DC口上面的Type-C口;
(3)機械鍵盤和鼠標連接2個USB 3.2的接口;
(4)有線網口暫時不接,因為有無線網卡。
開機,顯示器切換到DP1:
不一會兒,進入Ubuntu的系統設置界面:
靠近點看:
accept后點擊continue:
選擇語言——中文(簡體),繼續:
連接無線網絡,選擇華為路由器的網絡,點擊 連接:
輸入密碼,connect:
選擇時區——上海,繼續:
輸入計算機名稱,登陸用戶名和密碼等信息,繼續:
要求輸入分區大小,看了下提示,輸入0,繼續:
設置Nvpmodel的Model,先選缺省的,繼續:
問你要不要安裝個瀏覽器,那就裝吧:
耐心等待安裝完畢,點擊Close。
系統會繼續進行安裝:
直到進入登陸界面:
輸入前面設置的密碼后進入Ubuntu的桌面:
在彈出的頁面中點擊Skip:
選擇No,點擊Next:
Next:
Done。
系統問要不要升級包:
先選擇Remind Me Later吧。
根據前面鏈接中的指引,打開終端:
sudo apt dist-upgrade
按Y繼續:
耐心等待upgrade完畢:
查看下內存和存儲的情況:
內存:
29G左右,估計是32G的內存。還有交換分區14G左右,估計是16G。。這個數字硬件廠商各有統計尺度,此處先不深究。
32G內存國外售價是899美元。國內的價格暫時不談。。說多了都是淚。
存儲:
大概是64G的存儲,這跟標稱的eMMC存儲大小基本一致。
我們開始裝Jetpack。據官方要求,Orin設備需要安裝Jetpack 5.0。
sudo apt install nvidia-jetpack
咦?
看了下 /etc/apt/sources.list.d/nvidia-l4t-apt-source.list 文件:
這個源居然找不掉Jetpack包。。。
張小白又匆匆開始搜索,終于在Nvidia論壇發現了一個答案:
也就是需要將 r34.0改為r34.1才行,就如法炮制:
重新執行 sudo apt install nvidia-jetpack
按Y繼續:
好像報了個錯。應該是服務器不大好連。確實nvidia的服務器不大容易連,那就反復多試幾次:
耐心等待結束:
再試一次:
嗯。不用試了。應該是安裝完畢了。
根據官方說明,Jetpack 5.0包含以下組件:
它們的安裝位置如下:
現在檢查下目前安裝的軟件版本:
gcc和g++:9.4.0
CUDA的nvcc編譯器:11.4
編輯~/.bashrc
source后生效:
這樣就可以在任何地方編譯CUDA的代碼了。
opencv:4.5
Python:3.8.10,沒有裝PIP:
那就裝一下吧。
先安裝curl:
再用curl下載get-pip.py:
然后安裝pip:
好了,Orin基礎環境的安裝就先介紹到這里吧。
三、開練
基礎軟件安裝完畢后,當然是對這個設備做一些簡單的深度學習嘗試了。張小白曾經寫過一篇:
張小白:Nvidia Jetson Nano B01初體驗1 贊同 · 0 評論文章正在上傳…重新上傳取消
現在就依葫蘆畫瓢,看看Orin的表現如何:
LeNet是典型的手寫數字識別網絡,常用于深度學習初學者的入門,先用它來試一下:
1、cudnn_sample
cudnn_sample 內置了一個LeNet網絡的測試,我們來試一下:
先更新下源:
cd /usr/src/cudnn_samples_v8/mnistCUDNN/
開始編譯:
sudo make
發現需要安裝一些系統依賴包:sudo apt-get install libfreeimage3 libfreeimage-dev
安裝完畢后重新編譯:
進行測試:
從上面的例子可以看出,相關的圖片識別成為1、3、5,識別成功。
2、使用TensorFlow+Keras實現LeNet訓練
安裝系統依賴包:
sudo apt-get install python3-numpy
sudo apt-get install python3-scipy
sudo apt-get install python3-pandas
sudo apt-get install python3-matplotlib
sudo apt-get install python3-sklearn
sudo apt-get install libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip libjpeg8-dev liblapack-dev libblas-dev gfortran
sudo apt-get install python3-pip
安裝PIP依賴包:
sudo pip3 install -U --no-deps numpy==1.19.4 future==0.18.2 mock==3.0.5 keras_preprocessing==1.1.2 keras_applications==1.0.8 gast==0.4.0 protobuf pybind11 cython pkgconfig -i?https://pypi.tuna.tsinghua.edu.cn/simple
sudo env H5PY_SETUP_REQUIRES=0 pip3 install -U h5py==3.1.0
查看下JetPack 5.0 TensorFlow安裝盤的地址:
安裝TensorFlow1.15:
sudo pip3 install --pre --extra-index-url?https://developer.download.nvidia.com/compute/redist/jp/v50?'tensorflow<2'
檢查TensorFlow是否成功安裝:
安裝Keras并檢查是否成功安裝:
sudo pip3 install keras
準備 keras_lenet.py這個訓練LeNet網絡的Python代碼:(代碼來源:https://blog.csdn.net/mr_muli/article/details/80992600?作者:木里先森)
# -*- coding: utf-8 -*- """ Created on Tue Jul 10 20:04:03 2018@author: muli """import tensorflow.keras from tensorflow.keras.datasets import mnist from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Flatten, Conv2D, MaxPooling2D from tensorflow.keras import backend as Knum_classes = 10 img_rows, img_cols = 28, 28# 通過Keras封裝好的API加載MNIST數據。其中trainX就是一個60000 * 28 * 28的數組, # trainY是每一張圖片對應的數字。 (trainX, trainY), (testX, testY) = mnist.load_data()# 根據對圖像編碼的格式要求來設置輸入層的格式。 if K.image_data_format() == 'channels_first':trainX = trainX.reshape(trainX.shape[0], 1, img_rows, img_cols)testX = testX.reshape(testX.shape[0], 1, img_rows, img_cols)input_shape = (1, img_rows, img_cols) else:trainX = trainX.reshape(trainX.shape[0], img_rows, img_cols, 1)testX = testX.reshape(testX.shape[0], img_rows, img_cols, 1)input_shape = (img_rows, img_cols, 1)trainX = trainX.astype('float32') testX = testX.astype('float32') trainX /= 255.0 testX /= 255.0# 將標準答案轉化為需要的格式(one-hot編碼)。 trainY = tensorflow.keras.utils.to_categorical(trainY, num_classes) testY = tensorflow.keras.utils.to_categorical(testY, num_classes) # 2. 通過Keras的API定義卷積神經網絡 # 使用Keras API定義模型。 model = Sequential() model.add(Conv2D(32, kernel_size=(5, 5), activation='relu', input_shape=input_shape)) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Conv2D(64, (5, 5), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Flatten()) model.add(Dense(500, activation='relu')) model.add(Dense(num_classes, activation='softmax'))# 定義損失函數、優化函數和評測方法。 model.compile(loss=tensorflow.keras.losses.categorical_crossentropy,optimizer=tensorflow.keras.optimizers.SGD(),metrics=['accuracy'])# 3. 通過Keras的API訓練模型并計算在測試數據上的準確率 model.fit(trainX, trainY,batch_size=128,epochs=10,validation_data=(testX, testY))# 在測試數據上計算準確率。 score = model.evaluate(testX, testY) print('Test loss:', score[0]) print('Test accuracy:', score[1])執行LeNet模型的訓練代碼:
該Python腳本會下載MNIST數據集,然后開始加載訓練參數:
然后進行訓練:
經過了幾輪訓練,準確率提高到了0.9821,loss降低到了0.0597左右。可見,Jetson AGX Orin在LeNet網絡的運行結果,跟Jetson Nano是幾乎一樣的。當然,我們現在不涉及測試性能。
以上就是張小白初體驗Jetson AGX Orin設備的過程,還有更多的內容需要張小白一一去挖掘呢!
(全文完,謝謝閱讀)
總結
以上是生活随笔為你收集整理的Nvidia Jetson AGX Orin 初体验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android程序员该如何进阶?,202
- 下一篇: Python 实现生命游戏