版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
3硬件部署與工具介紹IntroductiontoHardwareDeploymentandToolsChapter03學(xué)習(xí)目標(biāo)硬件介紹01工具介紹02模型量化和推理03課后習(xí)題043.1硬件介紹
3.1.1主機(jī)AIBOX是一款為加速視頻AI(ArtificialIntelligence,人工智能)處理能力設(shè)計(jì)的硬件(如圖3-1所示),內(nèi)置高能效NPU(Neural-networkProcessingUnits,嵌入式神經(jīng)網(wǎng)絡(luò)處理器),適用于各類深度學(xué)習(xí)模型的加速推理。雙核Cortex-A35,最高頻率1.6GHz,峰值NPU算力高達(dá)3.0TOPs(TeraOperationsPerSecond,每秒鐘能處理的萬億次數(shù),1TOPs代表處理器每秒鐘可進(jìn)行一萬億次),支持OpenCL/OpenVX,支持INT8/INT16/FP16支持TensorFlow、Caffe、ONNX、Darknet模型。2GBDDR3內(nèi)存,8GB高速eMMC4.51存儲(chǔ)器。AIBOX主機(jī)外觀圖3.1硬件介紹
3.1.2RK1808K芯片簡介AIBOX主要的模塊是瑞芯微公司出的RK1808K:CPU:雙核Cortex-A35,最高頻率1.6GHzNPC:3TOPsforINT8/300GOPsforINT16/100GFLOPsforFP16支持OpenCL/OpenVX支持INT8/INT16/FP16支持TensorFlow、Caffe、ONNX、Darknet模型存儲(chǔ):800MHz32-bitLPDDR2/LPDDR3/DDR3/DDR3L/DDR4支持SerialSPINOR/NANDFlash,EMMC視頻處理器:1080p@60FPSH.264解碼1080p@30FPSH.264編碼3.1硬件介紹
3.1.2RK1808K芯片簡介圖像處理器:支持2MP,AE/AWB/AF視頻輸入:4-lane,MIPI-CSI,支持VirtualChannel支持BT.601/BT.656/BT.1120顯示:4-lane,MIPI-DSI,最大到1920*1080bitParallelRGBpanel,最大到1280*720其他接口:支持USB3.0/PCIe2.1內(nèi)置2-ch&8-chI2S&8-chPDM,內(nèi)置VAD支持千兆以太網(wǎng)8xUART/3xSPI/6xI2C/11xPWM/4xSARADC封裝:BGA14*14,F(xiàn)CCSP420LDRK1808系列BlockDiagram3.1硬件介紹
3.1.3接口1)線束接口攝像頭接口:3路AHD視頻,支持1080p、720p分辨率。以太網(wǎng)接口:2路Eth網(wǎng)絡(luò)接口,支持100Mbps傳輸速度。其中ETH1網(wǎng)線
接口用ssh訪問,用ssh訪問時(shí)需要一個(gè)航空轉(zhuǎn)網(wǎng)線的接口。
顯示屏接口:1路HDMI輸出。線束接口顯示屏及其接口2)USB接口:1路USB調(diào)試口,支持ADB調(diào)試。3)SD卡接口:1路SD卡接口,支持Fat、vFat、Ext2、
Ext3、Ext4文件系統(tǒng)。3.1硬件介紹
3.1.4電源連接1)電源24V供電
下圖是AIBox的電源線,電源線是改造之后的電源線,兩者都可使用。2)5VUSB供電,但USB供電帶不動(dòng)AHD攝像頭,需要接AHD攝像頭使用時(shí)用
電源供電。3.2工具介紹
3.2.1MobaXtermMobaxterm是一款遠(yuǎn)程管理工具,可以讓用戶在Windows操作系統(tǒng)中使用多個(gè)實(shí)用工具和遠(yuǎn)程連接功能,它結(jié)合了許多其他的網(wǎng)絡(luò)工具,以幫助用戶輕松管理遠(yuǎn)程計(jì)算機(jī)。這款軟件簡單易用,速度快,支持SSH、Telnet、SFTP、RDP和VNC等多種遠(yuǎn)程協(xié)議,同時(shí)還支持MSWindows系統(tǒng)本地X11映射。在MobaXterm官網(wǎng):/下載自己所需要的版本。MobaXterm提供了兩個(gè)版本,一個(gè)是HomeEdition(家庭版),另一個(gè)是ProfessionalEdition(專業(yè)版)。家庭版是免費(fèi)的,而專業(yè)版需要購買。如果你只需要基本的連接功能,那么家庭版足以滿足需求。3.2工具介紹
3.2.1MobaXterm選擇右邊的家庭版安裝即可3.2工具介紹
3.2.1MobaXterm下載好Mobaxterm軟件后雙擊打開,點(diǎn)擊Session選項(xiàng),如左圖所示。然后選擇ssh連接,輸入主機(jī)IP地址,用戶名,端口等信息,即可建立起連接,如右圖所示。MobaXterm設(shè)置ssh連接3.2工具介紹
3.2.1MobaXterm創(chuàng)建好session后,輸入密碼(輸入密碼時(shí)并不會(huì)顯示,只管輸入后按確定即可,第一次登陸成功后會(huì)提示保存密碼,一般選擇同意),就可以連接上虛擬機(jī)了。而且連上虛擬機(jī)之后,它會(huì)自動(dòng)通過FTP也連接到虛擬機(jī),直接拖拽就可以進(jìn)行文件復(fù)制了。登陸后界面主要分兩塊,左邊的是主機(jī)的文件,右邊是終端,如圖所示。勾選左下角的“Followterminalfolder”可以讓兩個(gè)的工作路徑保持一致。終端界面介紹3.2工具介紹
3.2.1MobaXterm創(chuàng)建一個(gè)session之后,就可以在左側(cè)的session標(biāo)簽里留下它的信息,下次需要連接的時(shí)候直接雙擊即可,如上圖所示。文件傳輸和下載可以采用直接拖拽的方式,或者采用鼠標(biāo)右鍵選擇相應(yīng)功能,也可以點(diǎn)擊文件的右鍵,選擇下載或者其他功能,如右圖所示。3.2工具介紹
3.2.2OpenCV移植和使用OpenCV是一個(gè)開源的計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)軟件庫。OpenCV主要為開發(fā)計(jì)算機(jī)視覺程序提供一組公共的底層結(jié)構(gòu)(infrastructure)和加強(qiáng)商業(yè)產(chǎn)品中機(jī)器的感知能力。OpenCV使用BSD許可證(具體可參見維基百科對于BSD許可證的介紹),它可以被商用并可以修改源代碼。OpenCV主要用于圖像的加載和保存,圖像的簡單處理。3.2工具介紹
3.2.2OpenCV移植和使用3.2.2.1OpenCV移植1)下載 #下載opencv gitclone/opencv/opencv.git #下載opencv_contrib gitclone/opencv/opencv_contrib.git #得到opencv目錄和opencv_contrib目錄并列2)版本切換 #將opencv和opencv_contrib從master分支切換到3.4分支 gitcheckout3.43.2工具介紹
3.2.2OpenCV移植和使用3.2.2.1OpenCV移植3)編譯腳本make_opencv.sh在opencv目錄加入make_opencv.sh腳本,內(nèi)容如下:set-x."$(dirname"$0")/config.sh"echo"${PROJECT_DIR}"OPENCV_ROOT=${PROJECT_DIR}/BUILD_DIR=$OPENCV_ROOT/platforms/build_rk1808exportINSTALL_DIR=${PROJECT_DIR}/install_rk1808rm-rf"${BUILD_DIR}"mkdir-p"${BUILD_DIR}"pushd"${BUILD_DIR}"###注意:CMAKE_TOOLCHAIN_FILE需要填寫自己環(huán)境的真實(shí)位置cmake-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON\ -DCMAKE_TOOLCHAIN_FILE="/xxx/xxx/rk1808/prebuilts/gcc/linux-x86/aarch64-rk1808.toolchain.cmake"\-DWITH_CUDA=OFF\-DWITH_MATLAB=OFF\-DWITH_WEBP=OFF\-DBUILD_ANDROID_EXAMPLES=OFF\-DBUILD_DOCS=OFF\-DBUILD_PERF_TESTS=OFF\-DBUILD_TESTS=OFF\-DBUILD_ZLIB=ON\-DBUILD_PNG=ON\-DBUILD_JPEG=ON\-DBUILD_TIFF=ON\-DBUILD_opencv_world=ON\-DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}/opencv"\ -DCMAKE_MAKE_PROGRAM=make\../..make-j32makeinstall3.2工具介紹
3.2.2OpenCV移植和使用3.2.2.1OpenCV移植4)編譯chmod+xmake_opencv.sh./make_opencv.sh5)編譯結(jié)果在opencv/install_rk1808目錄下生成了opencv目錄(如右圖),包括:開發(fā)中主要使用opencv的inlude頭文件和lib下的libopencv_world.so動(dòng)態(tài)庫。3.2工具介紹
3.2.2OpenCV移植和使用CMakeLists.txt: cmake_minimum_required(VERSION2.8.11) include_directories(.) #注意:此處填寫真實(shí)環(huán)境對應(yīng)的opencv include位置 include_directories(/opencv/path/include) set(DEMO_SRCmain.cpp) #注意:此處填寫真實(shí)環(huán)境對應(yīng)的opencvlib位置 set(link_libs/opencv/path/lib/libopencv_world.so) SET(TARGETopencv_test) add_executable(${TARGET}${DEMO_SRC}) target_link_libraries(${TARGET}${link_libs}libc.so)main.cpp:#include<opencv2/opencv.hpp>intmain(intargc,constchar**argv){cv::Matimg;img=cv::imread(argv[1]);cv::imwrite("/userdata/test.jpg",img);return0;}
3.2.2.2OpenCV使用3.2工具介紹3.2.3圖像格式轉(zhuǎn)換和圖像縮放RGA是瑞芯微提供的硬件加速的二維圖像基本操作庫,例如旋轉(zhuǎn)、鏡像、縮放、拷貝、剪裁、格式轉(zhuǎn)換等。為了提高圖像處理的可移植性和可用性,對圖像格式轉(zhuǎn)換和縮放接口進(jìn)行了二次封裝。3.2.3.1接口介紹1)
圖像結(jié)構(gòu)體:enum
Format{HQ_RK_FORMAT_RGBA_8888=0x0,HQ_RK_FORMAT_RGBX_8888=0x1,HQ_RK_FORMAT_RGB_888=0x2,HQ_RK_FORMAT_BGRA_8888=0x3,HQ_RK_FORMAT_RGB_565=0x4,HQ_RK_FORMAT_RGBA_5551=0x5,HQ_RK_FORMAT_RGBA_4444=0x6,HQ_RK_FORMAT_BGR_888=0x7,3.2工具介紹3.2.3.1接口介紹
HQ_RK_FORMAT_YCbCr_422_SP=0x8,
HQ_RK_FORMAT_YCbCr_422_P=0x9,
HQ_RK_FORMAT_YCbCr_420_SP=0xa,
HQ_RK_FORMAT_YCbCr_420_P=0xb,
HQ_RK_FORMAT_YCrCb_422_SP=0xc,
HQ_RK_FORMAT_YCrCb_422_P=0xd,
HQ_RK_FORMAT_YCrCb_420_SP=0xe,
HQ_RK_FORMAT_YCrCb_420_P=0xf,
HQ_RK_FORMAT_BPP1=0x10,
HQ_RK_FORMAT_BPP2=0x11,
HQ_RK_FORMAT_BPP4=0x12,
HQ_RK_FORMAT_BPP8=0x13,
HQ_RK_FORMAT_YCbCr_420_SP_10B=0x20,
HQ_RK_FORMAT_YCrCb_420_SP_10B=0x21,
HQ_RK_FORMAT_UNKNOWN=0x100,};structRgaCfg{
intwidth;
intheight;
intwidth_stride;
intheight_stride;
intformat;
//HAL_TRANSFORM_FLIP_H0x1
//HAL_TRANSFORM_FLIP_V0x2
//HAL_TRANSFORM_ROT_900x4
//HAL_TRANSFORM_ROT_1800x3
//HAL_TRANSFORM_ROT_2700x7
introtation;
//0xFF0100覆蓋;
//0xFF0105混合src+(1-alph)*dst
//0xFF0405混合src*alph+(1-alph)*dst
intblend;
//0x00->0xFF:全透明->全不透明
intalpha;
//圖像截取的位置
Rectrect;};3.2工具介紹3.2.3.1接口介紹2)
創(chuàng)建: RgaInterface*getRgaInstance()3)
初始化: //src:輸入圖像的格式和大小 //dst:輸出圖像的格式和大小 virtualintRgaInit(RgaCfg&src,RgaCfg&dst)4)
反初始化: virtualvoidRgaUninit()5)
圖像轉(zhuǎn)換://srcBuffer:輸入圖像的數(shù)據(jù) //srcLen:輸入圖像的大小 //dstBuffer:輸出圖像的內(nèi)存,不需要函數(shù)外申請內(nèi)存,
由函數(shù)內(nèi)提供 //isSrcBufferDirect:已失效,默認(rèn)即可 virtualintRgaBlit(unsignedchar*srcBuffer,intsrcLen, unsignedchar**dstBuffer,boolisSrcBufferDirect=false)
在圖像轉(zhuǎn)換過程中,只需要一次RgaInit,告訴輸入的圖
像格式和大小、輸出的圖像格式和大小,在圖像輸入輸
出不變的情況下循環(huán)調(diào)用RgaBlit即可得到需要的格式和
大小的圖像。如圖像會(huì)隨時(shí)改變輸入與輸出的大小或者
格式,則不適合使用RGA處理。3.2工具介紹3.2.3.2轉(zhuǎn)換例子從輸入大小為1280×720,格式為yuv420sp的圖像中截取左上角位置(100,100),大小為800×400的圖像,并把800×400的輸入圖像轉(zhuǎn)換成600×300的RGB888格式輸出,代碼如下所示:RgaInterface*rga=getRgaInstance();if(!rga){
printf("getrgafailed\n");
returnNULL;}RgaCfgmSrcCfg;RgaCfgmDstCfg;mSrcCfg.width=1280;mSrcCfg.height=720;mSrcCfg.format=HQ_RK_FORMAT_YCbCr_420_SP;mSrcCfg.rect.w=800;mSrcCfg.rect.h=400;mSrcCfg.rect.x=100;mSrcCfg.rect.y=100;mDstCfg.width=600;mDstCfg.height=300;mDstCfg.format=HQ_RK_FORMAT_RGB_888;if(rga->RgaInit(mSrcCfg,mDstCfg)<0){
printf("rgainitfailed\n");
deleterga;
returnNULL;}unsignedchar*rgb888Out=NULL;//data是輸入圖像的數(shù)據(jù)//data_size是輸入圖像的大小//rgb888Out得到輸出圖像的數(shù)據(jù)rga->RgaBlit((unsignedchar*)data,data_size,&rgb888Out);3.2工具介紹3.2.4
素材采集整合以上VideoSource、RGA模塊的內(nèi)容,實(shí)現(xiàn)素材采集保存的簡單Demo。實(shí)時(shí)從攝像獲取YUV圖像,通過RGA轉(zhuǎn)換到RGB888格式和指定的大小,使用OpenCV庫保存圖片。//包含RGA頭文件#include"rga_interface.h"http://包含視頻源頭文件#include"video_source_interface.h"http://包含Opencv頭文件#include<opencv2/opencv.hpp>#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<signal.h>intg_exit=0;staticintidx=0;usingnamespaceai;//視頻源回調(diào)類classMyCallback:publicVideoSourceCallback{public:MyCallback(){ //創(chuàng)建一個(gè)RGA實(shí)例rgaInter=getRgaInstance();}
~MyCallback() { //銷毀RGA if(rgaInter) { deletergaInter; rgaInter=NULL; } }3.2工具介紹3.2.4
素材采集 //配置RGA參數(shù)intsetCFG(constintwidth,constintheight,intsrc_type){ //源圖像寬高srcCfg.width=width;srcCfg.height=height; //源圖像格式if(kVideoSourceFmtYuv420sp==src_type)srcCfg.format=0xe;elseif(src_type==kVideoSourceFmtYuv420p)srcCfg.format=0xf;elseif(src_type==kVideoSourceFmtYuv422sp)srcCfg.format=0xc;//;//RK_FORMAT_YCrCb_422_SP//從源圖像中截取的大小和位置
srcCfg.rect.x=0;srcCfg.rect.y=0;srcCfg.rect.w=width;srcCfg.rect.h=height;//目標(biāo)圖像的寬高和格式dstCfg.width=width;dstCfg.height=height;dstCfg.format=0x2;//RK_FORMAT_RGB_888; //初始化RGArgaInter->RgaInit(srcCfg,dstCfg);printf("RgaInitinitsuccess..\n");return0;}
//視頻源回調(diào)函數(shù),得到攝像頭一幀圖像
的數(shù)據(jù)、寬高和格式virtualvoidOnVideoSourceDataCallback(constunsignedchar*data,constintwidth,constintheight,constVideoSourceFmtsource_type){printf("videocallbackw:%d,h:%d\n",width,height);unsignedchar*bgrout=nullptr;3.2工具介紹3.2.4
素材采集//在第一幀視頻源回調(diào)時(shí),使用寬高信息來初始化RGA,只需要初始化一次if(first_frame){first_frame=false;setCFG(width,height,source_type);}
//根據(jù)圖像類型進(jìn)行圖像轉(zhuǎn)換switch(source_type){casekVideoSourceFmtYuv420p/*constant-expression*/:printf("video_type=%s\n","kVideoSourceFmtYuv420p");/*code*/break;casekVideoSourceFmtYuv420sp/*constant-expression*/://printf("video_type=%s\n","kVideoSourceFmtYuv420sp");rgaInter->RgaBlit((unsignedchar*)data,width*height*3/2,&bgrout);break;
casekVideoSourceFmtYuv422sp/*constant-expression*/:printf("video_type=%s\n","kVideoSourceFmtYuv422sp");//rgaInter->RgaBlitrgaInter->RgaBlit((unsignedchar*)data,width*height*2,&bgrout);break;casekVideoSourceFmtJpeg/*constant-expression*/:printf("video_type=%s\n","kVideoSourceFmtJpeg");break;casekVideoSourceFmtRgb888/*constant-expression*/:printf("video_type=%s\n","kVideoSourceFmtRgb888");break;casekVideoSourceFmtRgb8888/*constant-expression*/:printf("video_type=%s\n","kVideoSourceFmtRgb8888");break;casekVideoSourceFmtBgr888/*constant-expression*/:printf("video_type=%s\n","kVideoSourceFmtBgr888");break;casekVideoSourceFmtRgb565/*constant-expression*/:printf("video_type=%s\n","kVideoSourceFmtRgb565");break;default:printf("video_type=%s\n","unknown");break;}3.2工具介紹3.2.4
素材采集//將轉(zhuǎn)換得到的圖像轉(zhuǎn)換成Opencv圖像格式cv::Matbgr_img=cv::Mat(dstCfg.height,dstCfg.width,CV_8UC3,(void*)bgrout);cv::Matimg=bgr_img.clone();charname[64]={0};sprintf(name,"/userdata/image_%d.jpg",idx); //保存圖像intret=cv::imwrite(name,img);printf("save%s%d\n",name,ret);idx++;}virtualvoidOnVideoSourceInitStatus(VideoSourceStatusstatus){}private:RgaInterface*rgaInter=nullptr;RgaCfgsrcCfg;RgaCfgdstCfg;boolfirst_frame=true;};voidsig_exit(intsig){g_exit=1;}intmain(intargc,char**argv){ //ctrl+c程序退出信號處理signal(SIGTERM,sig_exit);signal(SIGINT,sig_exit);
printf("usage:%s/dev/video01280720\n",argv[0]);if(argc!=4)return0;
char*dev=argv[1];intwidth=atoi(argv[2]);intheight=atoi(argv[3]);printf("dev:%s,width:%d,height:%d\n",dev,width,height); //實(shí)現(xiàn)VideoSource回調(diào)類MyCallbackcallback;VideoSourceInterface*video_source=VideoSourceInterface::Create(CameraTypeMipi,width,height);if(!video_source)return0;
//初始化VideoSource,內(nèi)部線程開始工作,圖像數(shù)據(jù)從callback中回調(diào)video_source->Init(&callback,kVideoSourceTypeCamera,dev); //等待退出信號while(!g_exit)usleep(100000); //視頻源退出video_source->Uninit();return0;}對應(yīng)的CMakeLists.txt:cmake_minimum_required(VERSION2.8.11)set(so_link_libsvideo_sourcerga_hq)include_directories(./)set(DEMO_SRCmain.cpp)set(EXEC_NAMEvideo_source_rga)add_executable(${EXEC_NAME}${DEMO_SRC})target_link_libraries(${EXEC_NAME}${so_link_libs}libc.so)3.3模型量化和推理
本章節(jié)將會(huì)介紹常用的四種框架的模型量化方式,并用圖像分類、目標(biāo)檢測、語義分割來演示推理的過程。模型的轉(zhuǎn)換需要用以下文件:1)和網(wǎng)絡(luò)輸入相同尺寸的實(shí)際應(yīng)用場景的圖片,圖片盡可能覆蓋所有可能出現(xiàn)的情況。(本章節(jié)單純介紹轉(zhuǎn)換、量化、模擬,所以僅使用1張圖片進(jìn)行量化,同樣也采用該圖片推理)2)記錄圖片列表的txt文件3)各類模型的文件量化的流程和接口可以直接參考Rockchip_User_Guide_RKNN_Toolkit,本章節(jié)主要是用實(shí)際的例子來向作者展示量化和推理過程。量化用到的是rknn的容器,本文中用到的是rknn-toolkit-1.4.0,docker鏡像所在地址xxxxx。#將鏡像文件導(dǎo)入到docker中dockerimportrknn-toolkit-1.4.0-docker.tar.gzrknn_toolkit:1.4.0#創(chuàng)建容器dockerrun-v/home:/home--namerknnrknn_toolkit:1.4.0#-v代表了磁盤的映射-v/宿主機(jī)目錄:/容器目錄#進(jìn)入容器dockerexec-itrknn/bin/bash3.3模型量化和推理3.3.1TensorFlow量化TensorFlow的權(quán)重所需要用到的是包含了網(wǎng)絡(luò)和權(quán)重的pb文件,一般訓(xùn)練過程中保存的ckpt文件,需要做一步轉(zhuǎn)換的操作。首先準(zhǔn)備需要的文件:量化圖片:image.jpg圖片列表:dataset.txt模型文件:frozen_inference_graph.pb推理相關(guān)文件:box_priors.txt預(yù)選框、labels_list.txt標(biāo)簽文件量化和推理程序:test.py(見課本58頁)模型評估結(jié)果模型推理結(jié)果3.3模型量化和推理3.3.2PyTorch量化PyTorch的權(quán)重所需要用到的是包含了網(wǎng)絡(luò)和權(quán)重的pth文件,需要做一步轉(zhuǎn)換的操作,一般這一步會(huì)在訓(xùn)練的工程中做,因?yàn)榫W(wǎng)絡(luò)的搭建必然是在訓(xùn)練的工程中的,用torchvision.models下載的權(quán)重演示則如下。defexport_pytorch_model():net=models.resnet18(pretrained=True)net.eval()trace_model=torch.jit.trace(net,torch.Tensor(1,3,224,224))trace_model.save('./resnet18.pt')首先準(zhǔn)備需要的文件:量化圖片:image.jpg圖片列表:dataset.txt模型文件:weight.pth量化和推理程序:test.py(見書本64頁)3.3模型量化和推理3.3.2PyTorch模型評估結(jié)果:模型推理結(jié)果:3.3模型量化和推理1)什么是ONNXOpenNeuralNetworkExchange(ONNX,開放神經(jīng)網(wǎng)絡(luò)交換)格式,是一個(gè)用于表示深度學(xué)習(xí)模型的標(biāo)準(zhǔn),可使模型在不同框架之間進(jìn)行轉(zhuǎn)移。ONNX是一種針對機(jī)器學(xué)習(xí)所設(shè)計(jì)的開放式的文件格式,用于存儲(chǔ)訓(xùn)練好的模型。它使得不同的人工智能框架(如PyTorch,MXNet)可以采用相同格式存儲(chǔ)模型數(shù)據(jù)并交互。ONNX的規(guī)范及代碼主要由微軟,亞馬遜,F(xiàn)acebook和IBM等公司共同開發(fā),以開放源代碼的方式托管在GitHub上。目前官方支持加載ONNX模型并進(jìn)行推理的深度學(xué)習(xí)框架有:Caffe2,PyTorch,MXNet,ML.NET,TensorRT和MicrosoftCNTK,并且TensorFlow也非官方的支持ONNX。2)為什么使用ONNXONNX是邁向開放式生態(tài)系統(tǒng)的第一步,可以理解為神經(jīng)網(wǎng)絡(luò)模型保存的中間格式,它支持多種格式的模型轉(zhuǎn)化為ONNX,可以讓不同框架不同平臺(tái)的模型在訓(xùn)練完成后有個(gè)共同的操作,這樣可以讓開發(fā)人員可以隨著項(xiàng)目的需求及發(fā)展選擇最合適的工具,同時(shí)可以讓算法及模型在不同的框架之間遷移,更加方便不同場景下的部署。簡而言之,ONNX的目的就是提供一個(gè)跨框架的模型中間表達(dá)框架,用于模型轉(zhuǎn)換和部署。它提供的計(jì)算圖是通用的,格式也是開源的。量化ONNX就不做詳細(xì)介紹了,這里借用PyTorch的量化方式,將模型轉(zhuǎn)換成ONNX后將rknn.load_pytorch(model='weight.pth',input_size_list=[[3,INPUT_HEIGHT,INPUT_WIDTH]])替換成rknn.load_onnx(model='weight.onnx')即可。3.3.3ONNX3.4課后習(xí)題1)簡要介紹一下AIBox。2)OpenCV主要用來做什么?3)模型的轉(zhuǎn)換一般需要用到哪些文件?4)什么是ONNX,它有什么作用?4軟件安裝與部署INSTALLATIONDEPLOYMENTChapter04學(xué)習(xí)目標(biāo)環(huán)境依賴搭建01系統(tǒng)設(shè)置02深度學(xué)習(xí)環(huán)境搭建03深度學(xué)習(xí)網(wǎng)絡(luò)搭建044.1環(huán)境依賴搭建4.1.1安裝Ubuntu系統(tǒng)Ubuntu是一個(gè)以桌面應(yīng)用為主的Linux操作系統(tǒng),其名稱來自非洲南部祖魯語或豪薩語的“Ubuntu”一詞,意思是“人性”,“我的存在是因?yàn)榇蠹业拇嬖凇?,是非洲傳統(tǒng)的一種價(jià)值觀。Ubuntu基于Debian發(fā)行版和Gnome桌面環(huán)境,而從11.04版起,Ubuntu發(fā)行版放棄了Gnome桌面環(huán)境,改為Unity。從前人們認(rèn)為Linux難以安裝、難以使用,在Ubuntu出現(xiàn)后這些都成為了歷史。Ubuntu也擁有龐大的社區(qū)力量,用戶可以方便地從社區(qū)獲得幫助。深度學(xué)習(xí)的訓(xùn)練任務(wù)基本是在Ubuntu系統(tǒng)下進(jìn)行的,所以下面介紹如何安裝Ubuntu系統(tǒng)。在安裝Ubuntu前我們需要做好以下準(zhǔn)備:1)Ubuntu的鏡像(可以去官方網(wǎng)站上下載:DownloadUbuntuDesktop|Download|Ubuntu)2)刻錄軟件,個(gè)人建議ULtralSO(可以在官方網(wǎng)站上下載:/)3)容量大于4G的U盤4)EasyBCD軟件,設(shè)置系統(tǒng)引導(dǎo),MBR需要EasyBCD引導(dǎo),而UEFI不需要(windows雙系統(tǒng),如果是單系統(tǒng)安裝請查看請轉(zhuǎn))4.1環(huán)境依賴搭建預(yù)裝Windows的情況下安裝Ubuntu系統(tǒng)的必要準(zhǔn)備當(dāng)前市面上的電腦購買回來都是預(yù)裝的Windows,下面就以win11為例,如何在電腦上安裝Ubuntu。首先我們需要知道自己電腦的類型:1)單個(gè)硬盤、MBR傳統(tǒng)BIOS;2)雙硬盤(固態(tài)硬盤和機(jī)械硬盤)、MBR傳統(tǒng)BIOS;3)單個(gè)硬盤、UEFI新BIOS;4)雙硬盤(固態(tài)硬盤和機(jī)械硬盤)、UEFI新BIOS;目前大部分的電腦都是UEFI新BIOS的,為了確認(rèn)可以在運(yùn)行界面輸入“msinfo32”,再按回車查看,運(yùn)行可以按住鍵盤上windows鍵+r鍵或者直接開始搜索“運(yùn)行”。4.1.1安裝Ubuntu系統(tǒng)預(yù)裝Windows的情況下安裝Ubuntu系統(tǒng)的必要準(zhǔn)備在系統(tǒng)摘要內(nèi)可以看到BIOS的模式,如果顯示傳統(tǒng)就說明是MBR傳統(tǒng)BIOS,UEFI就是UEFI新BIOS。購買電腦的時(shí)候一般都會(huì)注明硬盤數(shù)量和類型,若不清楚可以右擊我的電腦,點(diǎn)擊管理。預(yù)裝Windows的情況下安裝Ubuntu系統(tǒng)的必要準(zhǔn)備查看磁盤管理,看右下角有幾個(gè)磁盤對應(yīng)的就是幾個(gè)硬盤,如果有更多可以支持鼠標(biāo)滑輪下滑。若桌面沒有“此電腦”你可以右擊->個(gè)性化->主題->桌面圖標(biāo)設(shè)置->選擇計(jì)算機(jī)->確認(rèn),桌面即可出現(xiàn)“此電腦”,此時(shí)右擊查看硬盤信息。預(yù)裝Windows的情況下安裝Ubuntu系統(tǒng)的必要準(zhǔn)備下面開始正式安裝步驟:
可能網(wǎng)上有人說UEFI用Ubuntu作引導(dǎo),當(dāng)需要?jiǎng)h除Ubuntu的時(shí)候會(huì)很煩,但其實(shí)很簡單,只需要在上文中的磁盤管理中刪除對應(yīng)的卷,再使用DiskGenius刪除UEFI創(chuàng)建的EFI系統(tǒng)分區(qū)就搞定了。下面我們以UEFI用win作引導(dǎo)為例:1)創(chuàng)建空白磁盤分區(qū)選擇“此電腦”,右擊選擇管理->存儲(chǔ)->磁盤管理,便可以看到自己電腦的磁盤空間。然后找到windows磁盤管理的最后一個(gè)盤,然后右擊壓縮卷。預(yù)裝Windows的情況下安裝Ubuntu系統(tǒng)的必要準(zhǔn)備2)設(shè)置壓縮的空間量大小,如果太小的話可以把文件移動(dòng)到其他地方,保證有40G左右的空間,當(dāng)然越多越好,40GB換算成MB為單位后輸入對應(yīng)的大小,點(diǎn)擊壓縮(如左圖),等待一會(huì)后就會(huì)在這個(gè)磁盤后面多出一塊未分配的黑色分區(qū)(如右圖)。預(yù)裝Windows的情況下安裝Ubuntu系統(tǒng)的必要準(zhǔn)備3)將下載好的Ubuntu鏡像刻錄至U盤打開ULtralSO,點(diǎn)擊箭頭處,找到鏡像保存位置,然后單擊該鏡像后會(huì)出現(xiàn)框內(nèi)的文件。4)再次點(diǎn)擊“啟動(dòng)”,選擇寫入硬盤鏡像預(yù)裝Windows的情況下安裝Ubuntu系統(tǒng)的必要準(zhǔn)備點(diǎn)擊后的界面(寫入鏡像過程):這個(gè)時(shí)候你需要有幾點(diǎn)注意:
1.硬盤驅(qū)動(dòng)器必須對應(yīng)你自己的U盤。
2.鏡像是否選對
3.U盤的文件需要備份,因?yàn)檫@里會(huì)格式化U盤等待寫入完成后即可拔出U盤退出程序。4.1環(huán)境依賴搭建安裝Ubuntu下面開始安裝Ubuntu系統(tǒng),計(jì)算機(jī)有很多不同的廠商,每個(gè)廠商進(jìn)入BIOS的方法也不盡相同,但自行百度一般都是可以進(jìn)入BIOS系統(tǒng)的,這里的設(shè)置坑比較多,一定要仔細(xì),避免返工。具體安裝Ubuntu系統(tǒng)可以在網(wǎng)上搜索詳細(xì)教程。4.1環(huán)境依賴搭建4.1.2安裝WSL開發(fā)環(huán)境不止一種,讀者可以直接在Ubuntu下開發(fā),也可以Windows下建立虛擬機(jī),在虛擬機(jī)中安裝Ubuntu系統(tǒng)。本節(jié)介紹的是在win10環(huán)境下,使用WSL進(jìn)行開發(fā),并附帶VSCode輔助編寫調(diào)試。1)在控制面板->程序中打開“適用于Linux的Windows子系統(tǒng)”,然后重啟。4.1環(huán)境依賴搭建4.1.2安裝WSL打開MicrosoftStore,搜索Ubuntu并安裝如下所示,不要直接選Ubuntu,因?yàn)槟菚?huì)下載最新版,這里用18.04LTS。3)安裝結(jié)束后,在開始菜單找到Ubuntu圖標(biāo)(一般就在最上方)點(diǎn)擊打開,然后開始初始化Ubuntu并配置用戶名和密碼等,注意輸入密碼的時(shí)候是看不見的,但是已經(jīng)輸入進(jìn)去了,后面一步是讓你確認(rèn)密碼。4.1環(huán)境依賴搭建4.1.2安裝WSL4)更換軟件源為國內(nèi)源,并安裝必要工具#備份sudocp/etc/apt/sources.list/etc/apt/sources.list.bak#修改sudovi/etc/apt/sources.list#使用下面的源替換舊的內(nèi)容。deb/ubuntu/bionicmainrestricteduniversemultiversedeb-src/ubuntu/bionicmainrestricteduniversemultiversedeb/ubuntu/bionic-securitymainrestricteduniversemultiversedeb-src/ubuntu/bionic-securitymainrestricteduniversemultiversedeb/ubuntu/bionic-updatesmainrestricteduniversemultiversedeb-src/ubuntu/bionic-updatesmainrestricteduniversemultiversedeb/ubuntu/bionic-backportsmainrestricteduniversemultiversedeb-src/ubuntu/bionic-backportsmainrestricteduniversemultiversedeb/ubuntu/bionic-proposedmainrestricteduniversemultiversedeb-src/ubuntu/bionic-proposedmainrestricteduniversemultiverse#更新系統(tǒng)至最新(剛安裝的系統(tǒng),我總是喜歡先更新到最新,然后就不怎么更新了)sudoapt-getupdate&&sudoapt-getupgrade
#安裝cmake,zlib。交叉編譯工具鏈中的gdb依賴libpython2.7-devsudoaptinstallcmakegitbuild-essentialzlib1g-devlibpython2.7-dev--no-install-recommends4.1環(huán)境依賴搭建4.1.2安裝WSL5)配置環(huán)境變量rk1808所需要的交叉編譯工具鏈可以在本教材附贈(zèng)的工具包中獲取,把下載好的交叉編譯工具鏈壓縮包存放在Ubuntu的根目錄下:/home/用戶名,然后在終端下解壓tools.tar.gz。工程編譯需要直接將交叉編譯工具鏈配置到PATH中,具體的PATH路徑因人而異,本處是將解壓后的tools文件夾放在D盤目錄下。具體操作如右圖。4.1環(huán)境依賴搭建4.1.2安裝WSL驗(yàn)證交叉編譯配置是否正常。aarch64-linux-gnu-gcc--versionaarch64-linux-gnu-g++--version6)添加WSL路徑映射網(wǎng)絡(luò)驅(qū)動(dòng)器選擇WSL路徑WSL目錄4.1環(huán)境依賴搭建4.1.2安裝WSL7)使用VSCodeRemote開發(fā)VSCode官網(wǎng)地址/,依據(jù)系統(tǒng)選擇對應(yīng)的版本下載即可。使用VSCode在WSL下編程必要的插件是Remote-WSL。點(diǎn)擊右下角,選擇WSL窗口,文件->打開文件夾->選擇對應(yīng)工程->確定4.1環(huán)境依賴搭建4.1.3系統(tǒng)設(shè)置安裝好Ubuntu系統(tǒng)之后,需要修改系統(tǒng)中的某些設(shè)置和安裝必要的軟件,如修改時(shí)間、apt下載源等設(shè)置和安裝VIM等。4.1.3
.1系統(tǒng)設(shè)置Ubuntu認(rèn)為BIOS的時(shí)間是UTC時(shí)間,而Windows則認(rèn)為是本地時(shí)間,所以如果是雙系統(tǒng)的話,Windows和Ubuntu的時(shí)間會(huì)相差8個(gè)小時(shí),這樣就導(dǎo)致在切換系統(tǒng)時(shí),會(huì)出現(xiàn)時(shí)間差。為了使雙系統(tǒng)的時(shí)間保持一致,需要修改Ubuntu的時(shí)間。打開終端,執(zhí)行如下命令。$sudotimedatectlset-local-rtc1--adjust-system-clock4.1環(huán)境依賴搭建4.1.3系統(tǒng)設(shè)置4.1.3
.2安裝VIM在Linux下工作怎么能離開VIM?不管是后續(xù)更換apt或者Conda下載源,還是設(shè)置環(huán)境變量等操作,都需要VIM來對文件進(jìn)行讀寫等操作。1)安裝VIM$sudoaptinstallvim
2)修改VIM的配置VIM的默認(rèn)配色可能不那么漂亮,但勉強(qiáng)能用。當(dāng)然,如果想擁有更漂亮的配色方案和更多的功能、模式,使得VIM對文件的讀寫操作更加方便,可對.vimrc進(jìn)行如下配置。4.1環(huán)境依賴搭建4.1.3系統(tǒng)設(shè)置4.1.3
.2安裝VIM下載molokai配色方案并進(jìn)行安裝。
下載moloka配色方案,得到的是一個(gè)molokai文件夾,需要的molokai.vim配色插件放置在molokai/colors文件夾下。 $sudogitclone/tomasr/molokai
安裝molokai,首先進(jìn)入自己用戶文件夾下并新建.vim/colors文件夾。
$sudocd/myuserdir $sudomkdir.vim/colors
然后將下載的molokai.vim文件放入/myuserdir/.vim/colors中。
最后按接下來的步驟在VIM中使用molokai.vim配色方案。4.1環(huán)境依賴搭建4.1.3系統(tǒng)設(shè)置4.1.3
.2安裝VIM
在/home目錄下使用vim命令自動(dòng)創(chuàng)建.vimrc文件。$sudovim~/.vimrc在.vimrc文件中寫入需要的配置(見書本80頁)。3)VIM的一些基本操作VIM通??煞譃樗姆N模式,分別是普通模式、插入模式、命令模式和可視模式。下面介紹了進(jìn)入各種模式的方式以及在不同的模式下可執(zhí)行的操作。4.1環(huán)境依賴搭建4.1.3
.2安裝VIM1.普通模式打開或者新建文件,進(jìn)入普通模式,命令如下。$vimxxx.txt/.cpp/.py按Esc鍵可從任意模式回退到普通模式。在普通模式下,可進(jìn)行移動(dòng)、復(fù)制、粘貼、刪除等操作,命令如下。?xxx+Enter從當(dāng)前位置向上查找關(guān)鍵字,按n鍵移動(dòng)到下一位置。dd刪除或剪切整行D刪除或剪切一行字符,保留空行2dd/2D刪除或剪切多行:當(dāng)前行和下一行dG刪除或剪切光標(biāo)所在行和之后的所有行,光標(biāo)定位到首行則可刪除或剪切所有內(nèi)容d$刪除或剪切光標(biāo)位置到行尾的內(nèi)容u撤銷Ctrl+r恢復(fù)撤銷yy復(fù)制當(dāng)前行,包括換行符3yy復(fù)制光標(biāo)所在行和之后的兩行,包括換行符y$復(fù)制光標(biāo)位置到行尾,不包括換行符y^復(fù)制光標(biāo)位置到行首p小寫p可將內(nèi)容粘貼到光標(biāo)之后P大寫P可將內(nèi)容粘貼到光標(biāo)之前G移動(dòng)到末行,查看有多少行g(shù)g移動(dòng)到首行10G移動(dòng)到第10行Home/0/shift+4/移動(dòng)到行首End/$/shift+6/移動(dòng)到行尾/xxx+Enter從當(dāng)前位置向下查找關(guān)鍵字,按n鍵移動(dòng)到下一位置。4.1環(huán)境依賴搭建4.1.3
.2安裝VIM2.插入模式在普通模式下,通過i、a、o、I、A、O鍵均可進(jìn)入插入模式。在命令模式下,首先按Esc鍵退回普通模式,再通過上述鍵進(jìn)入插入模式。在插入模式下,可進(jìn)行文本輸入、刪除等操作,命令如下。i在光標(biāo)之前插入a在光標(biāo)之后追加o在光標(biāo)所在行的下一行增加新的一行I在行首處插入A在行尾處追加O在光標(biāo)所在行的上一行增加新的一行4.1環(huán)境依賴搭建4.1.3
.2安裝VIM3.命令模式在普通模式下,通過:(冒號)進(jìn)入命令模式。在插入模式下,首先按Esc鍵退回普通模式,再通過上述鍵進(jìn)入命令模式。在命令模式下,可對整個(gè)文檔進(jìn)行保存、退出和行號設(shè)置等操作,命令如下。:setnu設(shè)置行號:setnonu取消行號設(shè)置:setshiftwidth?查看當(dāng)前文本縮進(jìn)設(shè)定值:setshiftwidth=12設(shè)置文本縮進(jìn):setautoindent/ai設(shè)置自動(dòng)縮進(jìn):setautowrite/aw設(shè)置自動(dòng)存檔:q直接退出:wq保存并退出4.1環(huán)境依賴搭建4.1.3
.2安裝VIM4.可視模式在普通模式下,按小寫v,大寫V和Ctrl+v進(jìn)入不同的可視化模式。在其它模式下,首先按Esc進(jìn)入普通模式,再通過上述鍵進(jìn)入可視化模式。在可視化模式下,可對文本進(jìn)行復(fù)制、剪切、粘貼等操作,命令如下。v小寫v,字符可視化模式,選擇文本是以字符為單位。V大寫V,行可視化模式,選擇文本是以行為單位。Ctrl+v塊可視化模式,選擇文本是以矩形區(qū)域?yàn)閱挝?,按下Ctrl+v為矩形的一 角,光標(biāo)最終的位置為矩形的角。4.1環(huán)境依賴搭建4.1.3系統(tǒng)設(shè)置更換apt下載源Ubuntu默認(rèn)使用的官方apt源的服務(wù)器在國外,從國內(nèi)訪問速度非常慢。因此,為了加快訪問速度,需要把官方apt源更換為國內(nèi)apt源。國內(nèi)apt源有清華源、中科大源和阿里云源等,地址如下:
清華源:/ubuntu/。
中科大源:/ubuntu/。
阿里云源:/ubuntu/。更換apt源的步驟如下所示,以下所有命令均在終端執(zhí)行。4.1環(huán)境依賴搭建更換apt下載源1)獲取當(dāng)前Ubuntu的codename$sudolsb_release-aDistributorID:UbuntuDescription:Ubuntu18.04.5LTSRelease:18.04Codename:bionic根據(jù)如上顯示結(jié)果,可以看到Ubuntu18.04.5LTS的codename是bionic,更換apt源的時(shí)候需要對應(yīng)該信息。2)修改源文件source.list
1.進(jìn)入source.list存放目錄Ubuntu的源文件source.list存放在/etc/apt目錄下,按如下命令進(jìn)入該目錄。$sudocd/etc/apt
2.修改前備份該文件$sudocp-rsource.listsource.list.bak
3.修改source.list首先清空源文件source.list,然后打開并將如下內(nèi)容復(fù)制到source.list中,可以利用vim打開文件進(jìn)行復(fù)制、清空、粘貼、修改、保存并退出等操作。4.1環(huán)境依賴搭建更換apt下載源deb/ubuntu/bionicmainuniverserestrictedmultiversedeb/ubuntu/bionic-securitymainuniverserestrictedmultiversedeb/ubuntu/bionic-updatesmainuniverserestrictedmultiversedeb/ubuntu/bionic-proposedmainrestricteduniversemultiversedeb/ubuntu/bionic-backportsmainuniverserestrictedmultiversedeb-src/ubuntu/bionicmainuniverserestrictedmultiversedeb-src/ubuntu/bionic-securitymainuniverserestrictedmultiversedeb-src/ubuntu/bionic-updatesmainuniverserestrictedmultiversedeb-src/ubuntu/bionic-proposedmainrestricteduniversemultiversedeb-src/ubuntu/bionic-backportsmainuniverserestrictedmultiverse如果想將默認(rèn)源更換為清華源之外的其它源,只需將/ubuntu/更換為其它鏡像源的地址。另外,如果使用的Ubuntu版本不是18.04.5,則需要將bionic替換成第1步中自己的codename。3)更新軟件列表和升級$sudoapt-getupdate
$sudoapt-getupgrade更改軟件源后能顯著提高軟件下載速度,有助于后續(xù)很多軟件聯(lián)網(wǎng)下載。4.1環(huán)境依賴搭建4.1.3系統(tǒng)設(shè)置安裝GitGit是一個(gè)開源的分布式版本管理系統(tǒng),可以有效地、高速地管理項(xiàng)目版本。1)安裝Git$sudoaptinstallgit2)Git基本命令gitclonexxx(遠(yuǎn)程倉庫地址)將遠(yuǎn)程Git倉庫克隆至本地倉庫gitbranchdev(分支名)創(chuàng)建分支名devgitcheckoutdev切換到dev分支,可在此分支上修改項(xiàng)目文件,完成后提交主分支mastergitadd.將修改后的文件提交至?xí)捍鎱^(qū)gitcommit-m“修改了什么”將暫存區(qū)的文件提交至本地倉庫gitpush-uorigindev將本地倉庫dev分支推送到遠(yuǎn)程倉庫gitcheckoutmaster切換到主分支gitpull將本地倉庫更新至與遠(yuǎn)程倉庫一致gitmergedev把dev分支的項(xiàng)目文件合并到主分支gitpush-uoriginmaster將本地倉庫主分支推送至遠(yuǎn)程倉庫gitdiff查看當(dāng)前與上一次提交的文件修改之處gitstatus查看暫存區(qū)狀態(tài)4.1環(huán)境依賴搭建安裝Git3)Git密鑰生成,用于本地與GitHub賬戶之間通信。首先,在終端使用如下命令,引號內(nèi)為GitHub的郵箱注冊地址,讀者可根據(jù)需要修改。一路回車,在/root/.ssh下生成id_rsa和id_rsa.pub兩個(gè)文件。$sudossh-keygen-trsa-C"xxx@"然后利用vim打開/root/.ssh文件夾下的rsa.pub,并復(fù)制其所有內(nèi)容。最后,登錄GitHub賬戶,進(jìn)入setting/SSHKeys,將內(nèi)容粘貼至addsshkey中。經(jīng)過上述操作,就可以建立本地與GitHub賬戶之間的通信,然后推送和拉取倉庫了。4.1.3系統(tǒng)設(shè)置4.1環(huán)境依賴搭建安裝顯卡驅(qū)動(dòng)4.1.3系統(tǒng)設(shè)置在Ubuntu18.04上安裝NVIDIA有三種方法(英文版):使用標(biāo)準(zhǔn)Ubuntu倉庫進(jìn)行自動(dòng)化安裝。使用PPA倉庫進(jìn)行自動(dòng)化安裝。使用官方的NVIDIA驅(qū)動(dòng)進(jìn)行手動(dòng)安裝。當(dāng)前只介紹第三種安裝方法,其余方法請自行搜索。第三種方法安裝步驟如下:1)到官網(wǎng)上下載驅(qū)動(dòng)首先,進(jìn)入官網(wǎng)下載網(wǎng)址:/geforce/drivers/。然后,按照圖4-22進(jìn)行操作,在手動(dòng)搜索驅(qū)動(dòng)程序欄根據(jù)自己的GPU填寫相關(guān)信息,然后開始搜索,搜索結(jié)果會(huì)在網(wǎng)頁下方顯示。4.1環(huán)境依賴搭建安裝顯卡驅(qū)動(dòng)選擇最新的穩(wěn)定版進(jìn)行下載,當(dāng)前是510.54版本,下載完成后,得到一個(gè)runfile格式的驅(qū)動(dòng)文件NVIDIA-Linux-x86_64-510.54.run2)如果系統(tǒng)是UEFI引導(dǎo)的話,在BIOS里面清除安全引導(dǎo)(secureboot)首先,使用如下命令,查看是否有輸出。$sudolsmod|grepnouveau如果上述命令有輸出,打開/etc/modprobe.d/blacklist.conf,在末尾添加blacklistnouveau。之后運(yùn)行如下命令,使得更改生效。$sudoupdate-initramfs-u然后reboot重啟系統(tǒng)。系統(tǒng)重啟后,重新運(yùn)行如下命令,查看是否有輸出。$sudolsmod|grepnouveau如果沒有輸出的話接著往后進(jìn)行,否則檢查之前的操作是否有誤。4.1環(huán)境依賴搭建安裝顯卡驅(qū)動(dòng)3)登錄系統(tǒng),按下Ctrl+Alt+F2進(jìn)入字符模式:首先,運(yùn)行如下命令,停止界面。$sudoservicelightdmstop然后,給驅(qū)動(dòng)文件賦予運(yùn)行權(quán)限。$sudochmod+xNVIDIA-Linux-x86_64-410.78.run最后,安裝驅(qū)動(dòng)的依賴。$sudoaptinstallgccg++make$sudo./NVIDIA-Linux-x86_64-410.78.run-no-x-check-no-nouveau-check-no-opengl-files按照要求一步一步安裝即可,注意-no-opengl-files一定不能省略,否則不能正常啟動(dòng)系統(tǒng)。4)重啟機(jī)器,運(yùn)行如下命令,測試是否安裝成功。$nvidia-smi出現(xiàn)如圖所示情況,說明驅(qū)動(dòng)安裝成功,否則請檢查之前操作是否有誤4.1環(huán)境依賴搭建安裝顯卡驅(qū)動(dòng)5)禁止更新內(nèi)核版本我們通常會(huì)選擇使用sudoaptupdate來更新緩存,通過sudoaptupgrade來更新軟件。但是這時(shí)如果有更新的話,之前安裝過的驅(qū)動(dòng)就有可能出問題,所以我們禁止更新內(nèi)核版本。具體操作如下:查看正在使用的內(nèi)核版本$uname-a查看已經(jīng)安裝的內(nèi)核版本$dpkg--get-selectionsxxx(內(nèi)核版本)禁止更新內(nèi)核版本$sudoapt-markholdlinux-image-4.XX.X-XX-generic(內(nèi)核版本名稱)$sudoapt-markholdlinux-image-extra-4.XX.X-XX-generic(內(nèi)核版本名稱)運(yùn)行結(jié)果如圖所示:這樣,就實(shí)現(xiàn)了使用aptupgrade命令,不升級hold軟件包的功能。4.1環(huán)境依賴搭建4.1.3系統(tǒng)設(shè)置安裝CUDA和cuDNNCUDA是一種通用并行計(jì)算架構(gòu),該架構(gòu)使GPU能夠解決復(fù)雜的計(jì)算問題,并且大幅提升計(jì)算性能,從而加速深度學(xué)習(xí)模型訓(xùn)練速度。安裝步驟如下:1)下載CUDA進(jìn)入官網(wǎng)下載網(wǎng)址:/cuda-downloads,按圖所示選擇對應(yīng)的Linux系統(tǒng)相關(guān)信息,可得到對應(yīng)的CUDA版本。下載CUDA,建議下載”.run”結(jié)尾的驅(qū)動(dòng)文件。4.1環(huán)境依賴搭建4.1.3系統(tǒng)設(shè)置安裝CUDA和cuDNN2)安裝CUDA依賴$sudoapt-getinstallfreeglut3-devbuild-essentiallibx11-devlibxmu-devlibxi-devlibgl1-mesa-glxlibglu1-mesalibglu1-mesa-dev3)安裝CUDA安裝時(shí),一開始詢問是否安裝顯卡驅(qū)動(dòng)時(shí)候一定要選擇no,因?yàn)榍懊嬉呀?jīng)裝過了。4)安裝cuDNNcuDNN實(shí)際上是一個(gè)用于深度神經(jīng)網(wǎng)絡(luò)的GPU加速庫。安裝前需要自行注冊NVIDIA官網(wǎng)賬號,安裝步驟如下:首先,進(jìn)入官網(wǎng)下載網(wǎng)址:然后,解壓cuDNN壓縮包。$sudotar-zxvfcudnn-10.0-linux-x64-v7.6.24.tar最后,將解壓后的cuda文件夾拷貝到cuda的安裝目錄即可。$sudocp-rcudnn-10.0-linux-x64-v7.6.24/cuda/*/usr/local/cuda/通常還會(huì)配置下環(huán)境變量,比如在~/.bashrc文件末尾添加了如下內(nèi)容:#cudaexportPATH=/usr/local/cuda-10.0/bin:$PATHexportLD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:$LD_LIBRARY_PATH找到與CUDA版本對應(yīng)的cuDNN壓縮包,如圖所示,并下載(實(shí)際上里面就是單純的頭文件以及庫)。/rdp/cudnn-archive#a-collapse742-104.1環(huán)境依賴搭建4.1.3系統(tǒng)設(shè)置安裝Docker以及NVIDIA-DockerDocker是什么,通常的回答是:一個(gè)輕量級的虛擬機(jī)。Docker最大的好處就是打包很復(fù)雜的編譯環(huán)境,深度學(xué)習(xí)訓(xùn)練環(huán)境等。而在Docker中配置的環(huán)境不會(huì)對主機(jī)的物理環(huán)境產(chǎn)生任何影響。但是,Docker有一個(gè)致命的缺點(diǎn)就是不能直接使用物理機(jī)上的GPU,而我們卻又需要使用GPU,那該怎么辦呢?有需求就有人滿足需求,于是就有了NVIDIA-Docker的橫空出世。NVIDIA-Docker本質(zhì)上是docker的一個(gè)擴(kuò)展插件。有了這個(gè)神器就能在Docker中使用GPU了。1)安裝Docker全新安裝時(shí),無需執(zhí)行第一行。sudoaptremovedockerdocker-enginedocker.iosudoaptupdate添加依賴sudoaptinstallapt-transport-httpsca-certificatescurlsoftware-properties-common添加docker倉庫curl-fsSL/docker-ce/lin
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 臨時(shí)工作人員聘用協(xié)議2024年適用版版B版
- 課程設(shè)計(jì)與課程定位
- 2025年冀教版八年級科學(xué)下冊月考試卷含答案
- 2025年人教B版選擇性必修2物理下冊月考試卷含答案
- 2025年滬科版九年級歷史上冊階段測試試卷含答案
- 二零二五年度自然人向公司借款用于教育基金合同3篇
- 2024年甘肅林業(yè)職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試歷年參考題庫含答案解析
- 2025年滬科版二年級語文上冊階段測試試卷
- 2025年蘇教新版六年級英語下冊月考試卷含答案
- 2024版航空運(yùn)輸與代理合同詳細(xì)條款
- 2024測繪個(gè)人年終工作總結(jié)
- DB11 637-2015 房屋結(jié)構(gòu)綜合安全性鑒定標(biāo)準(zhǔn)
- 制造業(yè)生產(chǎn)流程作業(yè)指導(dǎo)書
- DB34∕T 4444-2023 企業(yè)信息化系統(tǒng)上云評估服務(wù)規(guī)范
- 福建中閩能源股份有限公司招聘筆試題庫2024
- 2024年高中生物新教材同步必修第二冊學(xué)習(xí)筆記第5章 本章知識網(wǎng)絡(luò)
- 腦血管疾病三級預(yù)防
- HSK標(biāo)準(zhǔn)教程5上-課件-L1
- 人教版五年級下冊數(shù)學(xué)預(yù)習(xí)單、學(xué)習(xí)單、檢測單
- JC-T 746-2023 混凝土瓦標(biāo)準(zhǔn)規(guī)范
- 如何落實(shí)管業(yè)務(wù)必須管安全
評論
0/150
提交評論