開發(fā)環(huán)境

Linux

查看Unbuntu版本

lsb_release -a
uname -a
cat /proc/version

用戶管理

useradd [-m 建立用戶目錄][-c <備注>][-d <登入目錄>][-e <有效期限>][-f <緩沖天數(shù)>][-g <群組>][-G <群組>][-s <shell>][-u <uid>][用戶帳號]

user=NAME
useradd $user -d /home/$user -g HwHiAiUser; cp -r /etc/skel/. /home/$user/
useradd -m -s /bin/bash $user; usermod -g HwHiAiUser $user
useradd -m -s /bin/bash -g HwHiAiUser $user
chown -R $user:HwHiAiUser /home/$user/
passwd $user

# 修改用戶組
usermod -a -G HwHiAiUser $user

useradd通過命令添加用戶,adduser在Ubuntu上通過交互式命令添加用戶,Centos上兩者沒區(qū)別焚鹊。

Linux 使用 adduser 與 useradd 添加普通用戶

CentOS

清除yum緩存:

yum clean all
# 可選清除緩存椒舵,rm -rf /var/cache/yum/*

增刪改yum源后库物,重新構(gòu)建緩存:

yum makecache

yum源在官方CentOS源的基礎(chǔ)上疫萤,可配置EPEL(Extra Packages for Enterprise Linux)源芝囤,或安裝Software collections(即centos-release-scl次洼,具有持續(xù)更新的軟件包)关贵。

無網(wǎng)絡(luò)情況下,配置本地源卖毁,如配置EulerOS-2.0SP8源:

yum_path=/etc/yum.repos.d/euleros_aarch64.repo
echo "[base]" > ${yum_path}
echo "name=EulerOS-2.0SP8 base" >> ${yum_path}
echo "baseurl=MIRROR.DOMAIN/euler/2.8/os/aarch64/" >> ${yum_path}
echo "enabled=1" >> ${yum_path}
echo "gpgcheck=1" >> ${yum_path}
echo "gpgkey=MIRROR.DOMAIN/euler/2.8/os/aarch64/RPM-GPG-KEY-EulerOS" >> ${yum_path}

安裝GCC/G++揖曾,若yum無法安裝最新版本,則通過SCL安裝

yum install devtoolset-7
ln -s /opt/rh/devtoolset-7/root/usr/include/c++/7 /usr/include/c++/7
source /opt/rh/devtoolset-7/enable  # 可將該行寫入.bashrc
# 設(shè)置默認CC亥啦、CXX編譯器
export CC=/opt/rh/devtoolset-7/root/usr/bin/gcc
export CXX=/opt/rh/devtoolset-7/root/usr/bin/g++

CentOS C++開發(fā)環(huán)境配置炭剪,僅供參考,有部分錯誤翔脱。

SSH

SSH登錄很卡奴拦,關(guān)閉selinux(重啟生效),Arm系統(tǒng)默認是打開的:

sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
setenforce 0
/usr/sbin/sestatus -v

設(shè)置ssh不斷開:

sed -i "s/^export TMOUT.*/export TMOUT=0/g" /etc/profile
sed -i "s/.*ClientAliveInterval.*/ClientAliveInterval=600/g" /etc/ssh/sshd_config
sed -i "s/.*ClientAliveCountMax.*/ClientAliveCountMax=300/g" /etc/ssh/sshd_config
service sshd restart
export TMOUT=0

rsync傳輸文件届吁,支持斷點續(xù)傳错妖、增量同步,優(yōu)于scp

# DIR1被拷貝到DIR2下
rsync -av SRC/DIR1 USER@IP:/DEST/DIR2/

# DIR1下的文件/目錄被拷貝到DIR2下
rsync -av SRC/DIR1/ USER@IP:/DEST/DIR2/

端口放開

新裝系統(tǒng)默認開啟了防火墻疚沐,可以放開端口:

# 永久放開
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
# 臨時放開
iptables -I INPUT -p tcp --dport 8888 -j ACCEPT
iptables -I INPUT -p tcp --dport 1080 -j ACCEPT

查看進程

ps僅能查看進程啟動命令的相對路徑暂氯。啟動一個進程時,在/proc/目錄下會生成以進程號命名的文件夾亮蛔,里面有多個文件記錄了進程的詳細信息:

  • cwd軟鏈接是進程運行目錄痴施;
  • exe軟鏈接是執(zhí)行程序的絕對路徑;
  • cmdline文件記錄了命令行命令;
  • environ文件記錄了運行時的環(huán)境變量辣吃;
  • fd目錄保存了使用文件的軟連接动遭。

刪除進程

批量刪除/殺死CMD中包含KEYWORD(如train.py)的進程:

kill -9 `ps -ef | grep <KEYWORD> | awk '{print $2}' `

在上述要求的基礎(chǔ)上排除root進程:

ps -ef | grep <KEYWORD> | grep -v root | awk '{print $2}' | xargs kill -9

其中:

  • awk的作用是輸出某一列,{print $2}就是輸出第二列神得,如上為pid列厘惦。
  • grep -v的作用是排除某個字符,如上排除了root用戶的命令循头。
  • xargs從前面的命令獲取輸出作為參數(shù)來執(zhí)行下一個命令。

硬盤管理

查看目錄所在硬盤空間信息

df -lh /home/

Linux中查看硬盤信息 (daemon369.github.io)

查看塊設(shè)備炎疆,不帶參數(shù)時列出所有硬盤卡骂,根節(jié)點代表硬盤,二級節(jié)點代表磁盤上的分區(qū)形入。使用-d選項只列出硬盤全跨,不列出分區(qū)。

lsblk [-d]

統(tǒng)計行數(shù)

統(tǒng)計代碼行數(shù):

wc -l `find . -name '*.go'`

其中亿遂,-l 參數(shù)是統(tǒng)計行數(shù)浓若,find . -name *.go 是查找當前目錄(包含子目錄)下所有的go文件。

# 得到文件數(shù)目
find . -name '*.py' | wc -l
116

# 得到每個文件的行數(shù)及所有文件的行數(shù)
find . -name '*.py' | xargs wc -l
    43 ./dcama_mask_queryloss/check_coco_path.py
  18762 total

常用命令

zip -qr html.zip /home/html

Linux 軟連接蛇数,不要在目錄最后加/挪钓。軟連接實際是字符串映射,源路徑(已存在)會被當作字符串耳舅,路徑不存在也不會報錯碌上。源路徑請用絕對路徑,或在目標(軟連接)所在父目錄下能訪問的路徑浦徊。目標路徑可相對/絕對馏予,父路徑不存在會報錯,文件/目錄已存在則失斂浴(無提示)霞丧。

# ln [參數(shù)][源文件或目錄][目標文件或目錄]
ln -s /PATH/TO/data /home/USER/data
# 刪除軟連接
rm /home/USER/data
# 修改軟連接
ln -s /PATH/TO/new_data /home/USER/data

Bash歷史管理。

# 全部清除
history -c
# 刪除某行
history -d <行號>
# 修改文件
vim ~/.bash_history
# 修改文件后需刷新緩存
history -r 

rsync同步文件到本地冕香,中斷后本地文件夾/文件無法刪除蛹尝,提示沒有權(quán)限∠の玻可使用空文件夾/小文件覆蓋箩言,然后刪除』澜螅可能要注意原命令里文件夾是否帶有/陨收,保持一致,否則可能失敗。

rsync -rtv --delete USER@HOST:EMPTY_FOLDER DEL_FOLDER

?

sed -i "s/\r//" install.sh

系統(tǒng)代理

在打開的終端窗口里配置务漩,僅在當前窗口有效拄衰,關(guān)閉后失效。

# no_proxy為例外饵骨,非必須
export no_proxy="127.0.0.1, localhost"
export http_proxy="http://[USER:PASSWORD@]PROXY.DOMAIN:PORT"
export https_proxy="http://[USER:PASSWORD@]PROXY.DOMAIN:PORT"

SSL

OpenSSL 3.0.0a:軟件庫

SSLv3/SSL3:協(xié)議翘悉,Secure Sockets Layer

TLSv:協(xié)議,After SSLv3, SSL was renamed to TLS. Transport Layer Security and started with TLSv1.0 which is an upgraded version of SSLv3.

Ubuntu系統(tǒng)安裝證書:

添加證書:
復(fù)制pem格式的根證書居触,重命名為 .crt格式妖混。然后執(zhí)行下邊的命令

$sudo cp 證書路徑.crt /usr/local/share/ca-certificates`
$sudo update-ca-certificates

update-ca-certificates命令將PEM格式的根證書內(nèi)容附加到/etc/ssl/certs/ca-certificates.crt,而/etc/ssl/certs/ca-certificates.crt包含了系統(tǒng)自帶的各種可信根證書轮洋。

刪除證書:

$sudo rm -f /usr/local/share/ca-certificates/證書名稱.crt
$sudo update-ca-certificates

IDE

遠程開發(fā)

  • Windows本地IDE制市,如PyCharm, CLion, VScode,配置遠程開發(fā)環(huán)境弊予。
    • PyCham配置遠程解釋器祥楣。如需要可進一步修改(可選)遠程服務(wù)器配置
    • CLion配置遠程部署汉柒。如需要可進一步修改(可選)遠程服務(wù)器误褪。
    • Pycharm/CLion配置代理,用于自動安裝Plugins等:File>Settings>Appearance & Behavior>System Settings>HTTP Proxy>Manaual proxy configuration碾褂,內(nèi)容參考下方系統(tǒng)代理設(shè)置兽间。注意:No proxy for請?zhí)顚?code>*.公司域名,否則License會激活失敗正塌。
  • Linux服務(wù)器IDE渡八,如PyCharm, CLion,已解壓安裝到programs传货。啟動示例pycharm xxx/./pycharm/bin/pycharm.sh xxx/(需X11屎鳍,可安裝MobaXterm獲取)问裕。簡單但僅支持同時一個設(shè)備運行逮壁。

免密登錄

PyCharm、VScode均適用:vscode 使用pem文件免密連接服務(wù)器_vscode如何配置ssh的粮宛。pem-CSDN博客窥淆,免密/私鑰連接。
./ssh/config

Host 10.x.x.x
  HostName 10.x.x.x
  Port 22
  User USER
  IdentityFile ~/.ssh/XXX.pem

VSCode插件不兼容

  1. Download extension
  2. Unzip it as zip
  3. In extensions/package.json change "engines"."vscode" to compatible vscode version
  4. Zip extension folder
  5. Change zipped extension name from "extension.zip" to "extension.vsix"
  6. Install "extension.vsix" to vscode via "Install from VSIX..."

Conda

Miniconda — Conda documentation

配置國內(nèi)鏡像源:

新建環(huán)境:

# 查看環(huán)境
conda env list
# 或
conda info --envs
# 新建環(huán)境
conda create -n NAME pyton=3.9  # ==鎖死小版本3.9.0巍杈,=不鎖死小版本3.9.x
# 或拷貝已有環(huán)境忧饭,節(jié)省下載時間
conda create -n NEW --clone OLD

如果是非聯(lián)網(wǎng)環(huán)境,可以通過打包并拷貝conda環(huán)境的方式筷畦,拷貝到相同目錄后conda可以自動識別词裤。要求絕對路徑相同刺洒,如其他機器的同樣用戶名下的conda環(huán)境/root/miniconda3/envs

激活環(huán)境:

# 在base或某個conda環(huán)境下
conda activate ENV
# 若未在某個conda環(huán)境下
source ~/miniconda3/bin/activate ENV

設(shè)置代理:

# 配置(注意對特殊字符做URL Encode)
conda config --set proxy_servers.http http://[USER:PASSWORD@]PROXY.DOMAIN:PORT
conda config --set proxy_servers.https http://[USER:PASSWORD@]PROXY.DOMAIN:PORT
conda config --set ssl_verify false
# 刪除
conda config --remove-key proxy_servers
# 查看
conda config --show proxy_servers

刪除環(huán)境:

# 刪除環(huán)境及所有包
conda remove -n ENV --all

conda安裝環(huán)境時吼砂,可能會安裝CUDA-Toolkit之類的庫在~/miniconda3/lib下逆航,部分程序可能默認訪問/usr/local/cuda/lib64/下的庫文件,導(dǎo)致報錯渔肩,例如:

ImportError: torch/lib/libtorch_cuda_cpp.so: symbol cudaGraphRetainUserObject version libcudart.so.11.0 not defined in file libcudart.so.11.0 with link time reference

可以手動設(shè)置export LD_LIBRARY_PATH=~/miniconda3/lib/:$LD_LIBRARY_PATH解決問題因俐。

如遇到CondaHTTPError: HTTP 000 CONNECTION FAILED,通常是網(wǎng)絡(luò)不穩(wěn)定周偎,可在conda配置中刪除channels, default_channels項抹剩,或者修改custom_channels項。目前發(fā)現(xiàn):

  • 安裝包conda install XXX蓉坎,使用阿里源可行澳眷。
  • 將錯誤信息里的包鏈接XXX.tar.bz2手動下載之后,執(zhí)行conda install xxx.tar.bz2進行安裝袍嬉,然后重新執(zhí)行原安裝命令境蔼,安裝依賴項灶平。不推薦伺通,會丟失來源。

如果在conda create ENV時遇到如下錯誤逢享,可在conda配置中刪除channels, default_channels項罐监,因為鏡像源可能不適合用于創(chuàng)建環(huán)境,使用默認的pkgs能解決瞒爬。

Collecting package metadata (current_repodata.json): failed
UnavailableInvalidChannel: The channel is not accessible or is invalid.
  channel name: anaconda/pkgs/main
  channel url: http://mirrors.aliyun.com/anaconda/pkgs/main
  error code: 403

如果遇到如下索引錯誤弓柱,通常是因為緩存中的索引文件因異常中斷導(dǎo)致格式錯誤,可以使用conda clean -i清除索引緩存侧但。

json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
ERROR conda.auxlib.logz:stringify(163): Expecting value: line 1 column 1 (char 0)

如果遇到如下包安全檢查錯誤矢空,通常是因為通過不同方式安裝了相同的包,手動刪除路徑對應(yīng)的tar包和目錄即可禀横。

SafetyError: The package for xxx located at /home/xxx/anaconda/... 
appears to be corrupted. The path ... 
has an incorrect size.
    reported size: 7680 bytes
    actual size: 5695 bytes

Python

# 配置清華源
pip config set global.index-url http://pypi.tuna.tsinghua.edu.cn/simple
pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn
# 刪除配置
pip config unset global.index-url
pip config unset global.trusted-host
# 查看配置
pip config list

安裝whl文件

pip install xxx.whl
# 卸載
pip uninstall xxx

源碼安裝庫

cd xxx
python setup.py install
# 卸載
pip uninstall xxx

源碼安裝Python

cd Python-3.7.5
./configure --prefix=/root/miniconda3/envs/ci --enable-shared
make -j72
make install -j72
./configure --prefix=/root/miniconda3/envs/ci
make -j72
make install -j72

Jupyter

后臺運行Jupyter屁药,log會輸出到nohup.out

nohup jupyter lab --ip=10.175.105.195 --port=1080 --allow-root &

CMake

支持非root用戶安裝:

  • Download | CMake頁面找到“Binary distributions”柏锄,下載對應(yīng)版本.sh文件酿箭,在希望安裝的目錄執(zhí)行文件sh XXX.sh,根據(jù)提示完成安裝趾娃$缘眨或者下載對應(yīng)的壓縮包,解壓希望安裝的目錄抬闷。
  • 修改.bashrc妇蛀,將安裝目錄下的bin/所在路徑添加到PATH環(huán)境變量里,source .bashrc或者重新打開終端窗口。
  • 檢查安裝版本cmake --version讥耗。

Make

make install指定安裝目錄

OpenCV

官網(wǎng):Home - OpenCV
安裝:OpenCV: Installation in Linux
支持非root用戶安裝有勾,配置CMAKE_INSTALL_PREFIX

# 從Github或者官網(wǎng)下載:[Releases - OpenCV](https://opencv.org/releases/)
wget -O opencv.zip https://github.com/opencv/opencv/archive/master.zip
unzip opencv.zip

# Create build directory
mkdir -p build && cd build

# Configure
cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=YES -D CMAKE_INSTALL_PREFIX=$HOME/programs/opencv/ ..

# Build,或者make -j4古程,通過nproc命令查詢線程數(shù)
cmake --build . -j4

# Install蔼卡,將include目錄和lib目錄拷貝到`CMAKE_INSTALL_PREFIX`
# 如果不拷貝到系統(tǒng)目錄,則無需sudo
sudo make install

CUDA支持挣磨,WITH_CUDA=ON, OPENCV_DNN_CUDA=ON雇逞。OpenCV 4.0之后所有CUDA加速庫被移到opencv_contrib下,需要將opencv和opencv_contrib一起build茁裙,即增加配置OPENCV_EXTRA_MODULES_PATH塘砸。

# build with all modules in opencv_contrib
cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules ../opencv
# build with one of opencv_contrib modules
cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules/cudaarithm ../opencv

# 示例
cmake .. -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=YES -D CMAKE_INSTALL_PREFIX=$HOME/programs/opencv/ \
-D WITH_CUDA=ON -D WITH_CUDNN=ON -D OPENCV_DNN_CUDA=ON -D WITH_CUBLAS=1 -D WITH_CUFFT=ON -D WITH_NVCUVID=ON \
-DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.5.5/modules/

# 可選指定,未指定時自動識別
-D CUDNN_LIBRARY=/usr/local/cuda/lib64/libcudnn.so.8.3.3 \
-D CUDNN_INCLUDE_DIR=/usr/local/cuda/include  \
-D CUDA_CUDA_LIBRARY=/usr/local/cuda/lib64/stubs/libcuda.so

TensorRT

若使用root權(quán)限使用apt-get/yum安裝晤锥,請下載deb/rpm包掉蔬,否則請下載tar包,NVIDIA TensorRT 8.x Download矾瘾。

安裝方法參考官方Install Guide女轿,含deb、rpm壕翩、tar包等安裝方法蛉迹。

安裝Boost

參考官網(wǎng)安裝指導(dǎo),支持非root用戶安裝放妈,支持安裝部分lib北救。在頁面前部Get Boost獲取源碼下載鏈接,下載并解壓芜抒,執(zhí)行:

cd path/to/boost_1_82_0
./bootstrap.sh --prefix=$HOME/programs/boost_1_82_0/
./b2 install

安裝GoogleTest/gtest

參考官方倉庫使用指導(dǎo)珍策,通常無需安裝,直接下載源碼宅倒,然后將源碼集成到C++工程中攘宙。如需安裝,下載源碼唉堪,執(zhí)行:

cd googletest        # Main directory of the cloned repository.
mkdir build          # Create a directory to hold the build output.
cd build

# Configure, Generate native build scripts for GoogleTest模聋。 GoogleMock可選關(guān)閉。
cmake .. [-DBUILD_GMOCK=OFF] -D CMAKE_INSTALL_PREFIX=$HOME/programs/googletest/

# Build唠亚,或者make -j4链方,通過nproc命令查詢線程數(shù)
cmake --build . -j4

# Install,將include目錄和lib目錄拷貝到`CMAKE_INSTALL_PREFIX`
# 如果不拷貝到系統(tǒng)目錄灶搜,則無需sudo
sudo make install

C++編譯器

GCC/G++祟蚀,Clang/LLVM工窍。
《CMake Best Practice》第 2 章筆記

將include目錄添加到C/C++頭文件搜索路徑里:

export C_INCLUDE_PATH=/opt/rh/devtoolset-11/root/usr/include/c++/11
export CPLUS_INCLUDE_PATH=/opt/rh/devtoolset-11/root/usr/include/c++/11

在Ubuntu 22.04中安裝Clang

sudo apt-get install libclang-14-dev clang-14

提示:libclang.so一般位于/usr/lib/x86-linux-gnu/libclang-10.so

在CentOS 7.6中安裝Clang

yum install centos-release-scl-rh
yum install llvm-toolset-7.0-clang
# 使Clang在當前Session生效
source /opt/rh/llvm-toolset-7.0/enable
# 可選前酿,修改.bashrc便于Clang自動生效
echo "source /opt/rh/devtoolset-7/enable" >> ~/.bashrc

配置環(huán)境變量患雏。為防止后續(xù)Clang無法自動找到頭文件,建議添加如下環(huán)境變量罢维。

export CPLUS_INCLUDE_PATH=/opt/rh/llvm-toolset-7.0/root/usr/lib64/clang/7.0.1/include

提示:libclang.so一般位于/opt/rh/llvm-toolset-7.0/root/usr/lib64/libclang.so.7淹仑。

在SLES 12.5中安裝Clang

sudo zypper install libclang7 clang7-devel

配置環(huán)境變量。為防止后續(xù)Clang無法自動找到頭文件肺孵,建議添加如下環(huán)境變量匀借。

export CPLUS_INCLUDE_PATH=/usr/lib64/clang/7.0.1/include

提示:libclang.so一般位于/usr/lib64/libclang.so

Clang

安裝Clang預(yù)編譯包

# 使用`uname -m`可獲取機器硬件架構(gòu)平窘,例如返回`x86_64`
# 使用`cat /etc/os-release`可獲取系統(tǒng)名稱吓肋、版本等信息
NAME=`cat /etc/os-release | awk -F= '{if ($1=="NAME") print $2}'`
VERSION_ID=`cat /etc/os-release | awk -F= '{if ($1=="VERSION_ID") print $2}'`

if [ "$NAME" == '"Ubuntu"' ];then
  # 在Ubuntu 22.04中安裝Clang
  if [ $VERSION_ID == '"22.04"' ];then
    sudo apt-get install libclang-14-dev clang-14
  else
    # 在Ubuntu 18.04中安裝Clang
    sudo apt-get install libclang-10-dev clang-10
  fi
elif [ "$NAME" == '"CentOS Linux"' ];then
  # 在CentOS 7.6中安裝Clang
  yum install centos-release-scl-rh
  yum install llvm-toolset-7.0-clang
  ENABLE="source /opt/rh/llvm-toolset-7.0/enable"
  CPLUS_INCLUDE_PATH=/opt/rh/llvm-toolset-7.0/root/usr/lib64/clang/7.0.1/include
  # 可選,修改.bashrc便于Clang自動生效
  echo $ENABLE >> ~/.bashrc
  # 配置環(huán)境變量瑰艘。為防止后續(xù)Clang無法自動找到頭文件是鬼,建議添加如下環(huán)境變量。
  echo "export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH" >> ~/.bashrc
elif [ "$NAME" == '"SLES"' ];then
  # 在SLES 12.5中安裝Clang
  sudo zypper install libclang7 clang7-devel
  CPLUS_INCLUDE_PATH=/usr/lib64/clang/7.0.1/include
  export $CPLUS_INCLUDE_PATH
  echo "export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH" >> ~/.bashrc
else
  echo "Warning: $NAME is not supported automatic installation of Clang, Please install it manually."
fi

# 必須通過`source`或`.`執(zhí)行腳本紫新,其中的環(huán)境變量才會在當前bash生效
# 新建bash也可以使環(huán)境變量立即生效
bash

源碼編譯安裝Clang

如果無法通過上述方法或者包管理工具安裝Clang>=6.0.0均蜜,可以在LLVM Release頁面嘗試
下載對應(yīng)平臺的安裝包。如果以上方法都不可行弊琴,則可以通過源碼編譯安裝LLVM和Clang兆龙,詳細安裝指導(dǎo)參考
Getting Started with the LLVM System杖爽。編譯LLVM依賴一些軟件包敲董,
需用戶提前確保依賴滿足,或者自行手動安裝依賴慰安。下表列出了這些依賴腋寨,“包名”列是LLVM所依賴的軟件包通常的名稱,
“版本”列是“可以工作“的軟件包版本化焕,“說明”列描述了LLVM如何使用這個軟件包萄窜。

包名 版本 說明
CMake >=3.20.0 生成Makefile/workspace
GCC >=7.1.0 C/C++編譯器
zlib >=1.2.3.4 壓縮/解壓功能
GNU Make 3.79, 3.79.1 編譯Makefile/build

下面以Clang7.0.0為例編譯安裝LLVM和Clang。

獲取源碼撒桨。通過Git獲取源碼查刻,包括LLVM和Clang子工程,切換到對應(yīng)版本凤类。

git clone https://github.com/llvm/llvm-project.git
git checkout llvmorg-7.0.0

或者直接下載對應(yīng)版本的源碼zip包穗泵。

wget https://github.com/llvm/llvm-project/archive/refs/tags/llvmorg-7.0.0.zip
# 如果沒有安裝wget,可以采用curl
curl -o llvmorg-7.0.0.zip https://github.com/llvm/llvm-project/archive/refs/tags/llvmorg-7.0.0.zip
# 解壓得到llvm-project-llvmorg-7.0.0目錄
unzip -q llvmorg-7.0.0.zip

編譯和安裝LLVM和Clang谜疤。

cd llvm-project-llvmorg-7.0.0/; mkdir build; cd build
# 建議不開啟libcxx;libcxxabi佃延,使用默認的gcc/g++配套的libstdc++
cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS="clang" -G "Unix Makefiles" ../llvm
make -j32  # 將32換成小于所在機器CPU線程數(shù)的數(shù)字现诀,或者去除數(shù)字,自動設(shè)定
make install  # 安裝到默認位置/usr/local/lib/

配置環(huán)境變量履肃。為防止后續(xù)Clang無法自動找到頭文件仔沿,建議添加如下環(huán)境變量。

export CPLUS_INCLUDE_PATH=/usr/local/lib/clang/7.0.0/include

提示:libclang.so一般位于/usr/local/lib/libclang.so尺棋。

CUDA

CUDA官網(wǎng)見CUDA Toolkit - Free Tools and Training | NVIDIA Developer封锉,包含下載、發(fā)行說明膘螟、安裝指導(dǎo)和文檔烘浦。三方教程見保姆級安裝NVIDIA CUDA、CUDNN萍鲸。

CUDA Toolkit與Toolkit Driver版本配套關(guān)系菇曲,參見CUDA 12.2 Release Notes癣猾,包括:

  • CUDA Toolkit and Minimum Required Driver Version for CUDA Minor Version Compatibility
    • Using a Minimum Required Version that is different from Toolkit Driver Version could be allowed in compatibility mode – please read the CUDA Compatibility Guide for details.
  • CUDA Toolkit and Corresponding Driver Versions
    • For convenience, the NVIDIA driver is installed as part of the CUDA Toolkit installation. Note that this driver is for development purposes and is not recommended for use in production with Tesla GPUs.

從CUDA 11開始,各個組件分別設(shè)置版本。

安裝流程為:

  1. 下載CUDA Toolkit 12.2 Update 1 Downloads
  2. 安裝:先安裝CUDA Driver柑爸,再安裝CUDA Tookit
  3. 配置環(huán)境變量

安裝指導(dǎo)見:

Rust

在 Windows 上針對 Rust 設(shè)置開發(fā)環(huán)境 | Microsoft Learn

VSCode插件:Rust with Visual Studio Code

配置Rustup鏡像源

配置Crates鏡像源

.cargo/config配置示例

[source.crates-io]
replace-with = 'ustc'

[source.ustc]
registry = "sparse+https://mirrors.ustc.edu.cn/crates.io-index/"

[source.tsinghua]
registry = "sparse+http://mirrors.tuna.tsinghua.edu.cn/crates.io-index/"

[http]
check-revoke = false

參考資料:

Apex

File "G:\Anaconda3\envs\xyy_imagenaire\lib\site-packages\apex\optimizers\fused_adam.py", line 80, in init
raise RuntimeError('apex.optimizers.FusedAdam requires cuda extensions')
RuntimeError: apex.optimizers.FusedAdam requires cuda extensions

參考:Issue #1193秀菱。This is because of apex cannot import amp_C,you can check the file "G:\Anaconda3\envs\xyy_imagenaire\lib\site-packages\apex\optimizers\fused_adam.py", also you can use your python shell to verify this:

import torch
import amp_C  # must import torch before import amp_C

Maybe you can get error like: libstdc++.so.6: version 'GLIBCXX_3.4.20' not found', If so, you can try the following commands:

conda install libgcc
export LD_LIBRARY_PATH=/path/to/anaconda/envs/myenv/lib:$LD_LIBRARY_PATH
cd /path/to/anaconda/envs/myenv/lib
ln -s libstdc++.so.6.0.30 libstdc++.so.6

And you can add export LD_LIBRARY_PATH=/path/to/anaconda/envs/myenv/lib:$LD_LIBRARY_PATH to ~/.bashrc file.

Libaio

編譯安裝libaio-0.3.113蹭睡,支持非root用戶衍菱。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市肩豁,隨后出現(xiàn)的幾起案子脊串,更是在濱河造成了極大的恐慌,老刑警劉巖清钥,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件琼锋,死亡現(xiàn)場離奇詭異,居然都是意外死亡祟昭,警方通過查閱死者的電腦和手機缕坎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來从橘,“玉大人念赶,你說我怎么就攤上這事础钠。” “怎么了叉谜?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵旗吁,是天一觀的道長。 經(jīng)常有香客問我停局,道長很钓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任董栽,我火速辦了婚禮码倦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锭碳。我一直安慰自己袁稽,他們只是感情好,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布擒抛。 她就那樣靜靜地躺著推汽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪歧沪。 梳的紋絲不亂的頭發(fā)上歹撒,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機與錄音诊胞,去河邊找鬼暖夭。 笑死,一個胖子當著我的面吹牛撵孤,可吹牛的內(nèi)容都是我干的迈着。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼早直,長吁一口氣:“原來是場噩夢啊……” “哼寥假!你這毒婦竟也來了市框?” 一聲冷哼從身側(cè)響起霞扬,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎枫振,沒想到半個月后喻圃,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡粪滤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年斧拍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片杖小。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡肆汹,死狀恐怖愚墓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情昂勉,我是刑警寧澤浪册,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站岗照,受9級特大地震影響村象,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜攒至,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一厚者、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧迫吐,春花似錦库菲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至梧却,卻和暖如春奇颠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背放航。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工烈拒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人广鳍。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓荆几,卻偏偏與公主長得像,于是被迫代替她去往敵國和親赊时。 傳聞我的和親對象是個殘疾皇子吨铸,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容