2024年6月18日 星期二

pyinstaller 打包 mmcv 相關的 exe 可能會遇到的問題

打包完後要執行時遇到了一個問題如下

FileNotFoundError: [Errno 2] No such file or directory: '/home/XXX/tmp-dir/_MEIkGapxs/yapf_third_party/_ylib2to3/Grammar.txt'

上網查到了這篇

https://blog.csdn.net/weixin_44243859/article/details/131890088

為了怕以上連結失效,這邊稍微重複一下內容

說是 pyinstaller 沒有自帶該第三方庫文件的hook的時候,就會導致這個包文件不被打包進來,解決辦法,寫個 hook,然後放進 pyinstaller 的 hooks 裡面,hook 文件的命名規範為: hook-yapf_third_party.py

from PyInstaller.utils.hooks import collect_data_files datas = collect_data_files("yapf_third_party")

以上就是這個 .py 的內容

但具體來說我還是不知道怎麼做

於是再查到了這篇

https://blog.csdn.net/cliffordl/article/details/138065845

看了這篇之後就明白很多

如果我要打包 main.py,然後我要讓他去 hook 一些 library

那我就在 main.py 旁邊開一個 hooks 資料夾

然後把上面的 hook-yapf_third_party.py 丟進這個資料夾

(其中 hook-xxx.py 的 xxx 就是 library 名稱)

然後在打包時加入 --additional-hooks-dir ./hooks

所以整個打包的指令就變成 

pyinstaller -F -c --additional-hooks-dir ./hooks main.py

這個問題這樣就解決了,然後接下來又遇到

ModuleNotFoundError: No module named 'mmcv._ext'

繼續上網查,發現這篇

https://blog.csdn.net/gc5218112/article/details/125172123

OK,他說要在 hiddenimports 加入 'mmcv', 'mmcv._ext'

找到 main.spec,照著加進去,然後執行

pyinstaller main.spec

問題也確實解決了,但這樣很不方便,我希望可以不要去改 .spec

所以這個命令可以寫成

pyinstaller -F -c --additional-hooks-dir ./hooks --hidden-import mmcv --hidden-import mmcv._ext main.py

這樣全部的問題都解決了,大功告成


2024年6月4日 星期二

ubuntu 20.04 安裝 CUDA 11.8 for RTX 4090

 先上個連結

https://gist.github.com/MihailCosmin/affa6b1b71b43787e9228c25fe15aeba?permalink_comment_id=4665431

上面這連結是在講 ubuntu 22.04 怎麼裝 CUDA 11.8

他的最後更新時間是 Oct 29, 2023

而現在是 June 04, 2024

NV Driver 版號又不太一樣了,在這紀錄一下踩坑紀錄

====================先照貼原本的內容====================

#!/bin/bash ### steps #### # verify the system has a cuda-capable gpu # download and install the nvidia cuda toolkit and cudnn # setup environmental variables # verify the installation ### ### to verify your gpu is cuda enable check lspci | grep -i nvidia ### If you have previous installation remove it first. sudo apt purge nvidia* -y sudo apt remove nvidia-* -y sudo rm /etc/apt/sources.list.d/cuda* sudo apt autoremove -y && sudo apt autoclean -y sudo rm -rf /usr/local/cuda* # system update sudo apt update && sudo apt upgrade -y # install other import packages sudo apt install g++ freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libglu1-mesa libglu1-mesa-dev # first get the PPA repository driver sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt update # find recommended driver versions for you ubuntu-drivers devices # install nvidia driver with dependencies sudo apt install libnvidia-common-515 libnvidia-gl-515 nvidia-driver-515 -y # reboot sudo reboot now # verify that the following command works nvidia-smi sudo wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600 sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/3bf863cc.pub sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/ /" # Update and upgrade sudo apt update && sudo apt upgrade -y # installing CUDA-11.8 sudo apt install cuda-11-8 -y # setup your paths echo 'export PATH=/usr/local/cuda-11.8/bin:$PATH' >> ~/.bashrc echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc source ~/.bashrc sudo ldconfig # install cuDNN v11.8 # First register here: https://developer.nvidia.com/developer-program/signup CUDNN_TAR_FILE="cudnn-linux-x86_64-8.7.0.84_cuda11-archive.tar.xz" sudo wget https://developer.download.nvidia.com/compute/redist/cudnn/v8.7.0/local_installers/11.8/cudnn-linux-x86_64-8.7.0.84_cuda11-archive.tar.xz sudo tar -xvf ${CUDNN_TAR_FILE} sudo mv cudnn-linux-x86_64-8.7.0.84_cuda11-archive cuda # copy the following files into the cuda toolkit directory. sudo cp -P cuda/include/cudnn.h /usr/local/cuda-11.8/include sudo cp -P cuda/lib/libcudnn* /usr/local/cuda-11.8/lib64/ sudo chmod a+r /usr/local/cuda-11.8/lib64/libcudnn* # Finally, to verify the installation, check nvidia-smi nvcc -V # install Pytorch (an open source machine learning framework) pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

====================以下是要更改的內容====================

# install nvidia driver with dependencies sudo apt install libnvidia-common-535 libnvidia-gl-535 nvidia-driver-535 -y

因為 driver 版本更新,這個時間點已經找不到 515 了

所以這邊把 515 改成 535


# verify that the following command works nvidia-smi sudo wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600 sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/3bf863cc.pub sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/ /"

這邊講的都是 ubuntu 22.04

我要的版本是 20.04,可以去下面這個網址

https://developer.nvidia.com/cuda-11-8-0-download-archive

選擇 Linux -> x86_64 -> Ubuntu -> 20.04 -> deb(network)

他會列出 Installation Instructions 如下

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.0-1_all.debsudo dpkg -i cuda-keyring_1.0-1_all.deb
sudo apt-get update
sudo apt-get -y install cuda

注意上面最後這句還有坑

# installing CUDA-11.8 sudo apt install cuda-11-8 -y

如果不指定版本的話他預設裝的版本一直安裝失敗

後來找到有人說其實可以指定 driver 版本

可以寫成下列的樣子

# installing CUDA-11.8 sudo apt install cuda-11-8 cuda-drivers=535.161.08-1

後面的步驟就沒有不同了

照著複製貼上即可成功安裝