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插件不兼容
- Download extension
- Unzip it as zip
- In extensions/package.json change "engines"."vscode" to compatible vscode version
- Zip extension folder
- Change zipped extension name from "extension.zip" to "extension.vsix"
- 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
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è)置版本。
安裝流程為:
- 下載CUDA Toolkit 12.2 Update 1 Downloads
- 安裝:先安裝CUDA Driver柑爸,再安裝CUDA Tookit
- 配置環(huán)境變量
安裝指導(dǎo)見:
- CUDA Quick Start Guide:簡略。優(yōu)先推薦颁虐。
- NVIDIA CUDA Installation Guide for Linux:詳細罕拂。
- Meta Package/Package Manager :RPM/Deb/Conda包,本身很小但是依賴多個包备徐,適合打包安裝萄传,支持自動升級。新手推薦蜜猾。
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用戶衍菱。