




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
3硬件部署與工具介紹IntroductiontoHardwareDeploymentandToolsChapter03學習目標硬件介紹01工具介紹02模型量化和推理03課后習題043.1硬件介紹
3.1.1主機AIBOX是一款為加速視頻AI(ArtificialIntelligence,人工智能)處理能力設計的硬件(如圖3-1所示),內置高能效NPU(Neural-networkProcessingUnits,嵌入式神經網絡處理器),適用于各類深度學習模型的加速推理。雙核Cortex-A35,最高頻率1.6GHz,峰值NPU算力高達3.0TOPs(TeraOperationsPerSecond,每秒鐘能處理的萬億次數,1TOPs代表處理器每秒鐘可進行一萬億次),支持OpenCL/OpenVX,支持INT8/INT16/FP16支持TensorFlow、Caffe、ONNX、Darknet模型。2GBDDR3內存,8GB高速eMMC4.51存儲器。AIBOX主機外觀圖3.1硬件介紹
3.1.2RK1808K芯片簡介AIBOX主要的模塊是瑞芯微公司出的RK1808K:CPU:雙核Cortex-A35,最高頻率1.6GHzNPC:3TOPsforINT8/300GOPsforINT16/100GFLOPsforFP16支持OpenCL/OpenVX支持INT8/INT16/FP16支持TensorFlow、Caffe、ONNX、Darknet模型存儲: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內置2-ch&8-chI2S&8-chPDM,內置VAD支持千兆以太網8xUART/3xSPI/6xI2C/11xPWM/4xSARADC封裝:BGA14*14,FCCSP420LDRK1808系列BlockDiagram3.1硬件介紹
3.1.3接口1)線束接口攝像頭接口:3路AHD視頻,支持1080p、720p分辨率。以太網接口:2路Eth網絡接口,支持100Mbps傳輸速度。其中ETH1網線
接口用ssh訪問,用ssh訪問時需要一個航空轉網線的接口。
顯示屏接口:1路HDMI輸出。線束接口顯示屏及其接口2)USB接口:1路USB調試口,支持ADB調試。3)SD卡接口:1路SD卡接口,支持Fat、vFat、Ext2、
Ext3、Ext4文件系統(tǒng)。3.1硬件介紹
3.1.4電源連接1)電源24V供電
下圖是AIBox的電源線,電源線是改造之后的電源線,兩者都可使用。2)5VUSB供電,但USB供電帶不動AHD攝像頭,需要接AHD攝像頭使用時用
電源供電。3.2工具介紹
3.2.1MobaXtermMobaxterm是一款遠程管理工具,可以讓用戶在Windows操作系統(tǒng)中使用多個實用工具和遠程連接功能,它結合了許多其他的網絡工具,以幫助用戶輕松管理遠程計算機。這款軟件簡單易用,速度快,支持SSH、Telnet、SFTP、RDP和VNC等多種遠程協(xié)議,同時還支持MSWindows系統(tǒng)本地X11映射。在MobaXterm官網:/下載自己所需要的版本。MobaXterm提供了兩個版本,一個是HomeEdition(家庭版),另一個是ProfessionalEdition(專業(yè)版)。家庭版是免費的,而專業(yè)版需要購買。如果你只需要基本的連接功能,那么家庭版足以滿足需求。3.2工具介紹
3.2.1MobaXterm選擇右邊的家庭版安裝即可3.2工具介紹
3.2.1MobaXterm下載好Mobaxterm軟件后雙擊打開,點擊Session選項,如左圖所示。然后選擇ssh連接,輸入主機IP地址,用戶名,端口等信息,即可建立起連接,如右圖所示。MobaXterm設置ssh連接3.2工具介紹
3.2.1MobaXterm創(chuàng)建好session后,輸入密碼(輸入密碼時并不會顯示,只管輸入后按確定即可,第一次登陸成功后會提示保存密碼,一般選擇同意),就可以連接上虛擬機了。而且連上虛擬機之后,它會自動通過FTP也連接到虛擬機,直接拖拽就可以進行文件復制了。登陸后界面主要分兩塊,左邊的是主機的文件,右邊是終端,如圖所示。勾選左下角的“Followterminalfolder”可以讓兩個的工作路徑保持一致。終端界面介紹3.2工具介紹
3.2.1MobaXterm創(chuàng)建一個session之后,就可以在左側的session標簽里留下它的信息,下次需要連接的時候直接雙擊即可,如上圖所示。文件傳輸和下載可以采用直接拖拽的方式,或者采用鼠標右鍵選擇相應功能,也可以點擊文件的右鍵,選擇下載或者其他功能,如右圖所示。3.2工具介紹
3.2.2OpenCV移植和使用OpenCV是一個開源的計算機視覺和機器學習軟件庫。OpenCV主要為開發(fā)計算機視覺程序提供一組公共的底層結構(infrastructure)和加強商業(yè)產品中機器的感知能力。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腳本,內容如下: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)境的真實位置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)編譯結果在opencv/install_rk1808目錄下生成了opencv目錄(如右圖),包括:開發(fā)中主要使用opencv的inlude頭文件和lib下的libopencv_world.so動態(tài)庫。3.2工具介紹
3.2.2OpenCV移植和使用CMakeLists.txt: cmake_minimum_required(VERSION2.8.11) include_directories(.) #注意:此處填寫真實環(huán)境對應的opencv include位置 include_directories(/opencv/path/include) set(DEMO_SRCmain.cpp) #注意:此處填寫真實環(huán)境對應的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圖像格式轉換和圖像縮放RGA是瑞芯微提供的硬件加速的二維圖像基本操作庫,例如旋轉、鏡像、縮放、拷貝、剪裁、格式轉換等。為了提高圖像處理的可移植性和可用性,對圖像格式轉換和縮放接口進行了二次封裝。3.2.3.1接口介紹1)
圖像結構體: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)
圖像轉換://srcBuffer:輸入圖像的數據 //srcLen:輸入圖像的大小 //dstBuffer:輸出圖像的內存,不需要函數外申請內存,
由函數內提供 //isSrcBufferDirect:已失效,默認即可 virtualintRgaBlit(unsignedchar*srcBuffer,intsrcLen, unsignedchar**dstBuffer,boolisSrcBufferDirect=false)
在圖像轉換過程中,只需要一次RgaInit,告訴輸入的圖
像格式和大小、輸出的圖像格式和大小,在圖像輸入輸
出不變的情況下循環(huán)調用RgaBlit即可得到需要的格式和
大小的圖像。如圖像會隨時改變輸入與輸出的大小或者
格式,則不適合使用RGA處理。3.2工具介紹3.2.3.2轉換例子從輸入大小為1280×720,格式為yuv420sp的圖像中截取左上角位置(100,100),大小為800×400的圖像,并把800×400的輸入圖像轉換成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是輸入圖像的數據//data_size是輸入圖像的大小//rgb888Out得到輸出圖像的數據rga->RgaBlit((unsignedchar*)data,data_size,&rgb888Out);3.2工具介紹3.2.4
素材采集整合以上VideoSource、RGA模塊的內容,實現素材采集保存的簡單Demo。實時從攝像獲取YUV圖像,通過RGA轉換到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;//視頻源回調類classMyCallback:publicVideoSourceCallback{public:MyCallback(){ //創(chuàng)建一個RGA實例rgaInter=getRgaInstance();}
~MyCallback() { //銷毀RGA if(rgaInter) { deletergaInter; rgaInter=NULL; } }3.2工具介紹3.2.4
素材采集 //配置RGA參數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;//目標圖像的寬高和格式dstCfg.width=width;dstCfg.height=height;dstCfg.format=0x2;//RK_FORMAT_RGB_888; //初始化RGArgaInter->RgaInit(srcCfg,dstCfg);printf("RgaInitinitsuccess..\n");return0;}
//視頻源回調函數,得到攝像頭一幀圖像
的數據、寬高和格式virtualvoidOnVideoSourceDataCallback(constunsignedchar*data,constintwidth,constintheight,constVideoSourceFmtsource_type){printf("videocallbackw:%d,h:%d\n",width,height);unsignedchar*bgrout=nullptr;3.2工具介紹3.2.4
素材采集//在第一幀視頻源回調時,使用寬高信息來初始化RGA,只需要初始化一次if(first_frame){first_frame=false;setCFG(width,height,source_type);}
//根據圖像類型進行圖像轉換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
素材采集//將轉換得到的圖像轉換成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); //實現VideoSource回調類MyCallbackcallback;VideoSourceInterface*video_source=VideoSourceInterface::Create(CameraTypeMipi,width,height);if(!video_source)return0;
//初始化VideoSource,內部線程開始工作,圖像數據從callback中回調video_source->Init(&callback,kVideoSourceTypeCamera,dev); //等待退出信號while(!g_exit)usleep(100000); //視頻源退出video_source->Uninit();return0;}對應的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é)將會介紹常用的四種框架的模型量化方式,并用圖像分類、目標檢測、語義分割來演示推理的過程。模型的轉換需要用以下文件:1)和網絡輸入相同尺寸的實際應用場景的圖片,圖片盡可能覆蓋所有可能出現的情況。(本章節(jié)單純介紹轉換、量化、模擬,所以僅使用1張圖片進行量化,同樣也采用該圖片推理)2)記錄圖片列表的txt文件3)各類模型的文件量化的流程和接口可以直接參考Rockchip_User_Guide_RKNN_Toolkit,本章節(jié)主要是用實際的例子來向作者展示量化和推理過程。量化用到的是rknn的容器,本文中用到的是rknn-toolkit-1.4.0,docker鏡像所在地址xxxxx。#將鏡像文件導入到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/宿主機目錄:/容器目錄#進入容器dockerexec-itrknn/bin/bash3.3模型量化和推理3.3.1TensorFlow量化TensorFlow的權重所需要用到的是包含了網絡和權重的pb文件,一般訓練過程中保存的ckpt文件,需要做一步轉換的操作。首先準備需要的文件:量化圖片:image.jpg圖片列表:dataset.txt模型文件:frozen_inference_graph.pb推理相關文件:box_priors.txt預選框、labels_list.txt標簽文件量化和推理程序:test.py(見課本58頁)模型評估結果模型推理結果3.3模型量化和推理3.3.2PyTorch量化PyTorch的權重所需要用到的是包含了網絡和權重的pth文件,需要做一步轉換的操作,一般這一步會在訓練的工程中做,因為網絡的搭建必然是在訓練的工程中的,用torchvision.models下載的權重演示則如下。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')首先準備需要的文件:量化圖片:image.jpg圖片列表:dataset.txt模型文件:weight.pth量化和推理程序:test.py(見書本64頁)3.3模型量化和推理3.3.2PyTorch模型評估結果:模型推理結果:3.3模型量化和推理1)什么是ONNXOpenNeuralNetworkExchange(ONNX,開放神經網絡交換)格式,是一個用于表示深度學習模型的標準,可使模型在不同框架之間進行轉移。ONNX是一種針對機器學習所設計的開放式的文件格式,用于存儲訓練好的模型。它使得不同的人工智能框架(如PyTorch,MXNet)可以采用相同格式存儲模型數據并交互。ONNX的規(guī)范及代碼主要由微軟,亞馬遜,Facebook和IBM等公司共同開發(fā),以開放源代碼的方式托管在GitHub上。目前官方支持加載ONNX模型并進行推理的深度學習框架有:Caffe2,PyTorch,MXNet,ML.NET,TensorRT和MicrosoftCNTK,并且TensorFlow也非官方的支持ONNX。2)為什么使用ONNXONNX是邁向開放式生態(tài)系統(tǒng)的第一步,可以理解為神經網絡模型保存的中間格式,它支持多種格式的模型轉化為ONNX,可以讓不同框架不同平臺的模型在訓練完成后有個共同的操作,這樣可以讓開發(fā)人員可以隨著項目的需求及發(fā)展選擇最合適的工具,同時可以讓算法及模型在不同的框架之間遷移,更加方便不同場景下的部署。簡而言之,ONNX的目的就是提供一個跨框架的模型中間表達框架,用于模型轉換和部署。它提供的計算圖是通用的,格式也是開源的。量化ONNX就不做詳細介紹了,這里借用PyTorch的量化方式,將模型轉換成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課后習題1)簡要介紹一下AIBox。2)OpenCV主要用來做什么?3)模型的轉換一般需要用到哪些文件?4)什么是ONNX,它有什么作用?4軟件安裝與部署INSTALLATIONDEPLOYMENTChapter04學習目標環(huán)境依賴搭建01系統(tǒng)設置02深度學習環(huán)境搭建03深度學習網絡搭建044.1環(huán)境依賴搭建4.1.1安裝Ubuntu系統(tǒng)Ubuntu是一個以桌面應用為主的Linux操作系統(tǒng),其名稱來自非洲南部祖魯語或豪薩語的“Ubuntu”一詞,意思是“人性”,“我的存在是因為大家的存在”,是非洲傳統(tǒng)的一種價值觀。Ubuntu基于Debian發(fā)行版和Gnome桌面環(huán)境,而從11.04版起,Ubuntu發(fā)行版放棄了Gnome桌面環(huán)境,改為Unity。從前人們認為Linux難以安裝、難以使用,在Ubuntu出現后這些都成為了歷史。Ubuntu也擁有龐大的社區(qū)力量,用戶可以方便地從社區(qū)獲得幫助。深度學習的訓練任務基本是在Ubuntu系統(tǒng)下進行的,所以下面介紹如何安裝Ubuntu系統(tǒng)。在安裝Ubuntu前我們需要做好以下準備:1)Ubuntu的鏡像(可以去官方網站上下載:DownloadUbuntuDesktop|Download|Ubuntu)2)刻錄軟件,個人建議ULtralSO(可以在官方網站上下載:/)3)容量大于4G的U盤4)EasyBCD軟件,設置系統(tǒng)引導,MBR需要EasyBCD引導,而UEFI不需要(windows雙系統(tǒng),如果是單系統(tǒng)安裝請查看請轉)4.1環(huán)境依賴搭建預裝Windows的情況下安裝Ubuntu系統(tǒng)的必要準備當前市面上的電腦購買回來都是預裝的Windows,下面就以win11為例,如何在電腦上安裝Ubuntu。首先我們需要知道自己電腦的類型:1)單個硬盤、MBR傳統(tǒng)BIOS;2)雙硬盤(固態(tài)硬盤和機械硬盤)、MBR傳統(tǒng)BIOS;3)單個硬盤、UEFI新BIOS;4)雙硬盤(固態(tài)硬盤和機械硬盤)、UEFI新BIOS;目前大部分的電腦都是UEFI新BIOS的,為了確認可以在運行界面輸入“msinfo32”,再按回車查看,運行可以按住鍵盤上windows鍵+r鍵或者直接開始搜索“運行”。4.1.1安裝Ubuntu系統(tǒng)預裝Windows的情況下安裝Ubuntu系統(tǒng)的必要準備在系統(tǒng)摘要內可以看到BIOS的模式,如果顯示傳統(tǒng)就說明是MBR傳統(tǒng)BIOS,UEFI就是UEFI新BIOS。購買電腦的時候一般都會注明硬盤數量和類型,若不清楚可以右擊我的電腦,點擊管理。預裝Windows的情況下安裝Ubuntu系統(tǒng)的必要準備查看磁盤管理,看右下角有幾個磁盤對應的就是幾個硬盤,如果有更多可以支持鼠標滑輪下滑。若桌面沒有“此電腦”你可以右擊->個性化->主題->桌面圖標設置->選擇計算機->確認,桌面即可出現“此電腦”,此時右擊查看硬盤信息。預裝Windows的情況下安裝Ubuntu系統(tǒng)的必要準備下面開始正式安裝步驟:
可能網上有人說UEFI用Ubuntu作引導,當需要刪除Ubuntu的時候會很煩,但其實很簡單,只需要在上文中的磁盤管理中刪除對應的卷,再使用DiskGenius刪除UEFI創(chuàng)建的EFI系統(tǒng)分區(qū)就搞定了。下面我們以UEFI用win作引導為例:1)創(chuàng)建空白磁盤分區(qū)選擇“此電腦”,右擊選擇管理->存儲->磁盤管理,便可以看到自己電腦的磁盤空間。然后找到windows磁盤管理的最后一個盤,然后右擊壓縮卷。預裝Windows的情況下安裝Ubuntu系統(tǒng)的必要準備2)設置壓縮的空間量大小,如果太小的話可以把文件移動到其他地方,保證有40G左右的空間,當然越多越好,40GB換算成MB為單位后輸入對應的大小,點擊壓縮(如左圖),等待一會后就會在這個磁盤后面多出一塊未分配的黑色分區(qū)(如右圖)。預裝Windows的情況下安裝Ubuntu系統(tǒng)的必要準備3)將下載好的Ubuntu鏡像刻錄至U盤打開ULtralSO,點擊箭頭處,找到鏡像保存位置,然后單擊該鏡像后會出現框內的文件。4)再次點擊“啟動”,選擇寫入硬盤鏡像預裝Windows的情況下安裝Ubuntu系統(tǒng)的必要準備點擊后的界面(寫入鏡像過程):這個時候你需要有幾點注意:
1.硬盤驅動器必須對應你自己的U盤。
2.鏡像是否選對
3.U盤的文件需要備份,因為這里會格式化U盤等待寫入完成后即可拔出U盤退出程序。4.1環(huán)境依賴搭建安裝Ubuntu下面開始安裝Ubuntu系統(tǒng),計算機有很多不同的廠商,每個廠商進入BIOS的方法也不盡相同,但自行百度一般都是可以進入BIOS系統(tǒng)的,這里的設置坑比較多,一定要仔細,避免返工。具體安裝Ubuntu系統(tǒng)可以在網上搜索詳細教程。4.1環(huán)境依賴搭建4.1.2安裝WSL開發(fā)環(huán)境不止一種,讀者可以直接在Ubuntu下開發(fā),也可以Windows下建立虛擬機,在虛擬機中安裝Ubuntu系統(tǒng)。本節(jié)介紹的是在win10環(huán)境下,使用WSL進行開發(fā),并附帶VSCode輔助編寫調試。1)在控制面板->程序中打開“適用于Linux的Windows子系統(tǒng)”,然后重啟。4.1環(huán)境依賴搭建4.1.2安裝WSL打開MicrosoftStore,搜索Ubuntu并安裝如下所示,不要直接選Ubuntu,因為那會下載最新版,這里用18.04LTS。3)安裝結束后,在開始菜單找到Ubuntu圖標(一般就在最上方)點擊打開,然后開始初始化Ubuntu并配置用戶名和密碼等,注意輸入密碼的時候是看不見的,但是已經輸入進去了,后面一步是讓你確認密碼。4.1環(huán)境依賴搭建4.1.2安裝WSL4)更換軟件源為國內源,并安裝必要工具#備份sudocp/etc/apt/sources.list/etc/apt/sources.list.bak#修改sudovi/etc/apt/sources.list#使用下面的源替換舊的內容。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所需要的交叉編譯工具鏈可以在本教材附贈的工具包中獲取,把下載好的交叉編譯工具鏈壓縮包存放在Ubuntu的根目錄下:/home/用戶名,然后在終端下解壓tools.tar.gz。工程編譯需要直接將交叉編譯工具鏈配置到PATH中,具體的PATH路徑因人而異,本處是將解壓后的tools文件夾放在D盤目錄下。具體操作如右圖。4.1環(huán)境依賴搭建4.1.2安裝WSL驗證交叉編譯配置是否正常。aarch64-linux-gnu-gcc--versionaarch64-linux-gnu-g++--version6)添加WSL路徑映射網絡驅動器選擇WSL路徑WSL目錄4.1環(huán)境依賴搭建4.1.2安裝WSL7)使用VSCodeRemote開發(fā)VSCode官網地址/,依據系統(tǒng)選擇對應的版本下載即可。使用VSCode在WSL下編程必要的插件是Remote-WSL。點擊右下角,選擇WSL窗口,文件->打開文件夾->選擇對應工程->確定4.1環(huán)境依賴搭建4.1.3系統(tǒng)設置安裝好Ubuntu系統(tǒng)之后,需要修改系統(tǒng)中的某些設置和安裝必要的軟件,如修改時間、apt下載源等設置和安裝VIM等。4.1.3
.1系統(tǒng)設置Ubuntu認為BIOS的時間是UTC時間,而Windows則認為是本地時間,所以如果是雙系統(tǒng)的話,Windows和Ubuntu的時間會相差8個小時,這樣就導致在切換系統(tǒng)時,會出現時間差。為了使雙系統(tǒng)的時間保持一致,需要修改Ubuntu的時間。打開終端,執(zhí)行如下命令。$sudotimedatectlset-local-rtc1--adjust-system-clock4.1環(huán)境依賴搭建4.1.3系統(tǒng)設置4.1.3
.2安裝VIM在Linux下工作怎么能離開VIM?不管是后續(xù)更換apt或者Conda下載源,還是設置環(huán)境變量等操作,都需要VIM來對文件進行讀寫等操作。1)安裝VIM$sudoaptinstallvim
2)修改VIM的配置VIM的默認配色可能不那么漂亮,但勉強能用。當然,如果想擁有更漂亮的配色方案和更多的功能、模式,使得VIM對文件的讀寫操作更加方便,可對.vimrc進行如下配置。4.1環(huán)境依賴搭建4.1.3系統(tǒng)設置4.1.3
.2安裝VIM下載molokai配色方案并進行安裝。
下載moloka配色方案,得到的是一個molokai文件夾,需要的molokai.vim配色插件放置在molokai/colors文件夾下。 $sudogitclone/tomasr/molokai
安裝molokai,首先進入自己用戶文件夾下并新建.vim/colors文件夾。
$sudocd/myuserdir $sudomkdir.vim/colors
然后將下載的molokai.vim文件放入/myuserdir/.vim/colors中。
最后按接下來的步驟在VIM中使用molokai.vim配色方案。4.1環(huán)境依賴搭建4.1.3系統(tǒng)設置4.1.3
.2安裝VIM
在/home目錄下使用vim命令自動創(chuàng)建.vimrc文件。$sudovim~/.vimrc在.vimrc文件中寫入需要的配置(見書本80頁)。3)VIM的一些基本操作VIM通常可分為四種模式,分別是普通模式、插入模式、命令模式和可視模式。下面介紹了進入各種模式的方式以及在不同的模式下可執(zhí)行的操作。4.1環(huán)境依賴搭建4.1.3
.2安裝VIM1.普通模式打開或者新建文件,進入普通模式,命令如下。$vimxxx.txt/.cpp/.py按Esc鍵可從任意模式回退到普通模式。在普通模式下,可進行移動、復制、粘貼、刪除等操作,命令如下。?xxx+Enter從當前位置向上查找關鍵字,按n鍵移動到下一位置。dd刪除或剪切整行D刪除或剪切一行字符,保留空行2dd/2D刪除或剪切多行:當前行和下一行dG刪除或剪切光標所在行和之后的所有行,光標定位到首行則可刪除或剪切所有內容d$刪除或剪切光標位置到行尾的內容u撤銷Ctrl+r恢復撤銷yy復制當前行,包括換行符3yy復制光標所在行和之后的兩行,包括換行符y$復制光標位置到行尾,不包括換行符y^復制光標位置到行首p小寫p可將內容粘貼到光標之后P大寫P可將內容粘貼到光標之前G移動到末行,查看有多少行gg移動到首行10G移動到第10行Home/0/shift+4/移動到行首End/$/shift+6/移動到行尾/xxx+Enter從當前位置向下查找關鍵字,按n鍵移動到下一位置。4.1環(huán)境依賴搭建4.1.3
.2安裝VIM2.插入模式在普通模式下,通過i、a、o、I、A、O鍵均可進入插入模式。在命令模式下,首先按Esc鍵退回普通模式,再通過上述鍵進入插入模式。在插入模式下,可進行文本輸入、刪除等操作,命令如下。i在光標之前插入a在光標之后追加o在光標所在行的下一行增加新的一行I在行首處插入A在行尾處追加O在光標所在行的上一行增加新的一行4.1環(huán)境依賴搭建4.1.3
.2安裝VIM3.命令模式在普通模式下,通過:(冒號)進入命令模式。在插入模式下,首先按Esc鍵退回普通模式,再通過上述鍵進入命令模式。在命令模式下,可對整個文檔進行保存、退出和行號設置等操作,命令如下。:setnu設置行號:setnonu取消行號設置:setshiftwidth?查看當前文本縮進設定值:setshiftwidth=12設置文本縮進:setautoindent/ai設置自動縮進:setautowrite/aw設置自動存檔:q直接退出:wq保存并退出4.1環(huán)境依賴搭建4.1.3
.2安裝VIM4.可視模式在普通模式下,按小寫v,大寫V和Ctrl+v進入不同的可視化模式。在其它模式下,首先按Esc進入普通模式,再通過上述鍵進入可視化模式。在可視化模式下,可對文本進行復制、剪切、粘貼等操作,命令如下。v小寫v,字符可視化模式,選擇文本是以字符為單位。V大寫V,行可視化模式,選擇文本是以行為單位。Ctrl+v塊可視化模式,選擇文本是以矩形區(qū)域為單位,按下Ctrl+v為矩形的一 角,光標最終的位置為矩形的角。4.1環(huán)境依賴搭建4.1.3系統(tǒng)設置更換apt下載源Ubuntu默認使用的官方apt源的服務器在國外,從國內訪問速度非常慢。因此,為了加快訪問速度,需要把官方apt源更換為國內apt源。國內apt源有清華源、中科大源和阿里云源等,地址如下:
清華源:/ubuntu/。
中科大源:/ubuntu/。
阿里云源:/ubuntu/。更換apt源的步驟如下所示,以下所有命令均在終端執(zhí)行。4.1環(huán)境依賴搭建更換apt下載源1)獲取當前Ubuntu的codename$sudolsb_release-aDistributorID:UbuntuDescription:Ubuntu18.04.5LTSRelease:18.04Codename:bionic根據如上顯示結果,可以看到Ubuntu18.04.5LTS的codename是bionic,更換apt源的時候需要對應該信息。2)修改源文件source.list
1.進入source.list存放目錄Ubuntu的源文件source.list存放在/etc/apt目錄下,按如下命令進入該目錄。$sudocd/etc/apt
2.修改前備份該文件$sudocp-rsource.listsource.list.bak
3.修改source.list首先清空源文件source.list,然后打開并將如下內容復制到source.list中,可以利用vim打開文件進行復制、清空、粘貼、修改、保存并退出等操作。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如果想將默認源更換為清華源之外的其它源,只需將/ubuntu/更換為其它鏡像源的地址。另外,如果使用的Ubuntu版本不是18.04.5,則需要將bionic替換成第1步中自己的codename。3)更新軟件列表和升級$sudoapt-getupdate
$sudoapt-getupgrade更改軟件源后能顯著提高軟件下載速度,有助于后續(xù)很多軟件聯網下載。4.1環(huán)境依賴搭建4.1.3系統(tǒng)設置安裝GitGit是一個開源的分布式版本管理系統(tǒng),可以有效地、高速地管理項目版本。1)安裝Git$sudoaptinstallgit2)Git基本命令gitclonexxx(遠程倉庫地址)將遠程Git倉庫克隆至本地倉庫gitbranchdev(分支名)創(chuàng)建分支名devgitcheckoutdev切換到dev分支,可在此分支上修改項目文件,完成后提交主分支mastergitadd.將修改后的文件提交至暫存區(qū)gitcommit-m“修改了什么”將暫存區(qū)的文件提交至本地倉庫gitpush-uorigindev將本地倉庫dev分支推送到遠程倉庫gitcheckoutmaster切換到主分支gitpull將本地倉庫更新至與遠程倉庫一致gitmergedev把dev分支的項目文件合并到主分支gitpush-uoriginmaster將本地倉庫主分支推送至遠程倉庫gitdiff查看當前與上一次提交的文件修改之處gitstatus查看暫存區(qū)狀態(tài)4.1環(huán)境依賴搭建安裝Git3)Git密鑰生成,用于本地與GitHub賬戶之間通信。首先,在終端使用如下命令,引號內為GitHub的郵箱注冊地址,讀者可根據需要修改。一路回車,在/root/.ssh下生成id_rsa和id_rsa.pub兩個文件。$sudossh-keygen-trsa-C"xxx@"然后利用vim打開/root/.ssh文件夾下的rsa.pub,并復制其所有內容。最后,登錄GitHub賬戶,進入setting/SSHKeys,將內容粘貼至addsshkey中。經過上述操作,就可以建立本地與GitHub賬戶之間的通信,然后推送和拉取倉庫了。4.1.3系統(tǒng)設置4.1環(huán)境依賴搭建安裝顯卡驅動4.1.3系統(tǒng)設置在Ubuntu18.04上安裝NVIDIA有三種方法(英文版):使用標準Ubuntu倉庫進行自動化安裝。使用PPA倉庫進行自動化安裝。使用官方的NVIDIA驅動進行手動安裝。當前只介紹第三種安裝方法,其余方法請自行搜索。第三種方法安裝步驟如下:1)到官網上下載驅動首先,進入官網下載網址:/geforce/drivers/。然后,按照圖4-22進行操作,在手動搜索驅動程序欄根據自己的GPU填寫相關信息,然后開始搜索,搜索結果會在網頁下方顯示。4.1環(huán)境依賴搭建安裝顯卡驅動選擇最新的穩(wěn)定版進行下載,當前是510.54版本,下載完成后,得到一個runfile格式的驅動文件NVIDIA-Linux-x86_64-510.54.run2)如果系統(tǒng)是UEFI引導的話,在BIOS里面清除安全引導(secureboot)首先,使用如下命令,查看是否有輸出。$sudolsmod|grepnouveau如果上述命令有輸出,打開/etc/modprobe.d/blacklist.conf,在末尾添加blacklistnouveau。之后運行如下命令,使得更改生效。$sudoupdate-initramfs-u然后reboot重啟系統(tǒng)。系統(tǒng)重啟后,重新運行如下命令,查看是否有輸出。$sudolsmod|grepnouveau如果沒有輸出的話接著往后進行,否則檢查之前的操作是否有誤。4.1環(huán)境依賴搭建安裝顯卡驅動3)登錄系統(tǒng),按下Ctrl+Alt+F2進入字符模式:首先,運行如下命令,停止界面。$sudoservicelightdmstop然后,給驅動文件賦予運行權限。$sudochmod+xNVIDIA-Linux-x86_64-410.78.run最后,安裝驅動的依賴。$sudoaptinstallgccg++make$sudo./NVIDIA-Linux-x86_64-410.78.run-no-x-check-no-nouveau-check-no-opengl-files按照要求一步一步安裝即可,注意-no-opengl-files一定不能省略,否則不能正常啟動系統(tǒng)。4)重啟機器,運行如下命令,測試是否安裝成功。$nvidia-smi出現如圖所示情況,說明驅動安裝成功,否則請檢查之前操作是否有誤4.1環(huán)境依賴搭建安裝顯卡驅動5)禁止更新內核版本我們通常會選擇使用sudoaptupdate來更新緩存,通過sudoaptupgrade來更新軟件。但是這時如果有更新的話,之前安裝過的驅動就有可能出問題,所以我們禁止更新內核版本。具體操作如下:查看正在使用的內核版本$uname-a查看已經安裝的內核版本$dpkg--get-selectionsxxx(內核版本)禁止更新內核版本$sudoapt-markholdlinux-image-4.XX.X-XX-generic(內核版本名稱)$sudoapt-markholdlinux-image-extra-4.XX.X-XX-generic(內核版本名稱)運行結果如圖所示:這樣,就實現了使用aptupgrade命令,不升級hold軟件包的功能。4.1環(huán)境依賴搭建4.1.3系統(tǒng)設置安裝CUDA和cuDNNCUDA是一種通用并行計算架構,該架構使GPU能夠解決復雜的計算問題,并且大幅提升計算性能,從而加速深度學習模型訓練速度。安裝步驟如下:1)下載CUDA進入官網下載網址:/cuda-downloads,按圖所示選擇對應的Linux系統(tǒng)相關信息,可得到對應的CUDA版本。下載CUDA,建議下載”.run”結尾的驅動文件。4.1環(huán)境依賴搭建4.1.3系統(tǒng)設置安裝CUDA和cuDNN2)安裝CUDA依賴$sudoapt-getinstallfreeglut3-devbuild-essentiallibx11-devlibxmu-devlibxi-devlibgl1-mesa-glxlibglu1-mesalibglu1-mesa-dev3)安裝CUDA安裝時,一開始詢問是否安裝顯卡驅動時候一定要選擇no,因為前面已經裝過了。4)安裝cuDNNcuDNN實際上是一個用于深度神經網絡的GPU加速庫。安裝前需要自行注冊NVIDIA官網賬號,安裝步驟如下:首先,進入官網下載網址:然后,解壓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án)境變量,比如在~/.bashrc文件末尾添加了如下內容:#cudaexportPATH=/usr/local/cuda-10.0/bin:$PATHexportLD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:$LD_LIBRARY_PATH找到與CUDA版本對應的cuDNN壓縮包,如圖所示,并下載(實際上里面就是單純的頭文件以及庫)。/rdp/cudnn-archive#a-collapse742-104.1環(huán)境依賴搭建4.1.3系統(tǒng)設置安裝Docker以及NVIDIA-DockerDocker是什么,通常的回答是:一個輕量級的虛擬機。Docker最大的好處就是打包很復雜的編譯環(huán)境,深度學習訓練環(huán)境等。而在Docker中配置的環(huán)境不會對主機的物理環(huán)境產生任何影響。但是,Docker有一個致命的缺點就是不能直接使用物理機上的GPU,而我們卻又需要使用GPU,那該怎么辦呢?有需求就有人滿足需求,于是就有了NVIDIA-Docker的橫空出世。NVIDIA-Docker本質上是docker的一個擴展插件。有了這個神器就能在Docker中使用GPU了。1)安裝Docker全新安裝時,無需執(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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東理工職業(yè)學院《藝術實踐與創(chuàng)作》2023-2024學年第二學期期末試卷
- 山西省岢嵐縣中學2025年高三下學期二模歷史試題試卷含解析
- 永嘉縣烏牛一中市級名校2025年初三二模沖刺(二)數學試題試卷含解析
- 江蘇護理職業(yè)學院《英語教師課堂教學基本技能》2023-2024學年第二學期期末試卷
- 山東旅游職業(yè)學院《數字電路與數字邏輯》2023-2024學年第二學期期末試卷
- 興寧市2025屆數學三下期末經典試題含解析
- 揚州工業(yè)職業(yè)技術學院《材料綜合與設計性》2023-2024學年第二學期期末試卷
- 山東省濰坊市臨朐市級名校2025年初三下學期考前模擬試卷英語試題含答案
- 內蒙古通遼市庫倫旗重點達標名校2025年高中畢業(yè)班第二次質量檢測試題化學試題文試題含解析
- 喀什職業(yè)技術學院《黑白木刻》2023-2024學年第二學期期末試卷
- 專利代理師考試題庫含答案2024
- DB12 T1230-2023 政務信息資源共享 總體框架
- 管道拆除專項施工方案
- 廣西壯族自治區(qū)馬山縣實驗高中-雙休背后:從“要我學”到“我要學”的轉變-高三家長會【課件】
- GB/Z 27021.13-2025合格評定管理體系審核認證機構要求第13部分:合規(guī)管理體系審核與認證能力要求
- 湖南省長沙市四大名校2024-2025學年高三2月月考語文試題(原卷版+解析版)
- 《政府采購管理研究的國內外文獻綜述》5500字
- 糖尿病護理查房提出問題
- 2024年國網浙江省電力有限公司招聘考試真題
- 微專題2 質量守恒定律的應用(解析版)
- 分析化學考試題(附參考答案)
評論
0/150
提交評論