Ce guide décrit les méthodes d'installation de paquets sur machine x86_x64 Ubuntu 22.04 non connectée à internet [cold
] :
- les paquets système via apt
- les paquets python via pip
Pour cela nous utilisons une seconde machine x86_x64, sous Ubuntu 22.04 également, connectée à internet [hot
] .
Vous pouvez utiliser une vm pour le rôle de hot
.
Ces méthodes fonctionnent probablement pour d'autres distributions basées sur Debian et d'autres architectures mais n'ont pas été testées.
Mise à jour | 07/07/2023 |
Github | ubuntu22.04-offline |
- L'architecture de
hot
doit être la même quecold
- être root sur les deux machines
- disposer d'un moyen de transfert de données (clé USB, ssh, ...) entre les deux machines
- S'assurer d'avoir configuré correctement la liste des repo si vous souhaitez installer des paquets non présents dans les repo officiels d'Ubuntu (par exemple
$ sudo add-apt-repository ppa:deadsnakes/ppa
pour les paquets python) - Télécharger le
<paquet>
ou les<paquet1 paquet2 ...>
désirés ainsi que toutes leurs dépendances récursivement dans le repertoire courant :hot: $ apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances <paquet1 paquet2 ...> | grep "^\w" | sort -u)
-
Définissez un répertoire persistent qui sera votre repository local (exemple ici :
~/local-apt-rep/
)cold: $ mkdir ~/local-apt-rep
-
Editer le fichier
/etc/apt/sources.list
:# Local repository deb [trusted=yes] file:<full_path_to_~/local-apt-repo> ./
Vous pouvez aussi commenter toutes les autres lignes pour éviter que apt perde tu temps à essayer de contacter les repo en ligne.
- Copier les
*.deb
téléchargés depuishot
dans~/local-apt-repo
. - Créer / Mettre à jour l'index du repo :
cold: $ cd ~/local-apt-repo/ cold: $ apt-ftparchive packages . > Packages
- Mettre à jour apt :
cold: sudo apt update
- Installer le ou les nouveaux paquets
cold: sudo apt install <paquet1 paquet2 ...>
Il est possible que apt vous renvoie le warning suivant, vous pouvez l'ignorer :
N: Download is performed unsandboxed as root as file '/host/download/apt/repo/./libpython3.11-minimal_3.11.4-1+jammy1_amd64.deb' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)
- Créer un environnement virtuel basé sur la même version de python que la cible (python3.9 dans cet exemple):
hot: $ python3.9 -m venv ~/venv-3.9
- Activez l'environnement virtuel
hot: $ source ~/venv-3.9/bin/activate>
- Télécharger les paquets ainsi que leur dépendance dans le repertoire courant:
hot: $ pip download <paquet1 paquet2 ...>
- Définissez un répertoire persistent qui sera votre repository local (exemple ici :
~/local-pip-repo
) :cold: $ mkdir ~/local-pip-rep
- Créer/éditer le fichier de configuration de pip
~/.config/pip/pip.conf
(vous pouvez vérifier si un fichier n'est pas déjà existant parmicold: $ pip config -v list
) :[global] no-index = yes find-links = <full_path_to_~/local-pip-repo>
- Copier les
*.whl
téléchargés depuishot
dans~/local-pip-repo
. - Activer votre environnement virtuel :
cold: $ source <path_to_venv/bin/activate>
- Installer classiquement les paquets :
cold: $ pip install <paquet1 paquet2 ...>
- Pour gagner du temps, vous pouvez utiliser un fichier
requirement.txt
lors de$ pip download
et$ pip install
. - Si vous n'avez pas pris la peine de modifier le fichier de configuration, il faudra spécifier à chaque appel :
cold: $ pip install <paquet1 paquet2 ... --no-index --find-links ~/local-pip-repo
- Vous pouvez éventuellement installer les paquets dans votre environnement virtuel sur
hot
afin d'avoir un clone decold
et limiter les conflits de paquets.
Mise en application : Installation d'un environnement de développement complet PyTorch 2.0.1+cu118 (GPU enable)
Installation de :
- python3.9 (à ce jour, PyTorch supporte jusqu'à python3.10)
- cuda 12.2 et son driver nvidia
- pytorch 2.01+cu118
Télécharger et installer les paquets python3.9-full
sur hot
:
hot: $ sudo apt update
hot: $ sudo add-apt-repository ppa:deadsnakes/ppa
hot: $ sudo apt install python3.9-full -y
hot: $ mkdir ~/local-apt-repo && cd ~/local-apt-repo
hot: $ apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances python3.9-full | grep "^\w" | sort -u)
Apres avoir configuré votre repository local pour apt sur cold
et transféré les .deb
:
cold: $ cd ~/local-apt-repo/
cold: $ apt-ftparchive packages . > Packages
cold: $ sudo apt update && sudo apt install python3.9-full -y
pytorch2.0.1+cu118 nécéssite au moins la version de cuda 11.8, mais fonctionne avec les versions ultérieures. Nous installons donc la dernière version de cuda disponible à ce jour : cuda 12.2. Vous pouvez également vous aider des deux sources officielles de nvidia suivantes :
- Le gpu est bien reconnu :
cold: $ lspci | grep -i nvidia
doit retourner votre gpu - gcc est installé :
cold: $ gcc --version
doit retourner11.3.0
minimum - Votre noyau est compatible :
cold: $ uname -r
doit retourner5.19.0-38
Cette version ne semble plus disponible pour Unbuntu et nvidia ne précise pas l'ensemble des noyaux compatible, testé avec
linux-image-5.19.0-46-generic
- Le paquet linux-headers correspondant à votre noyau est installé :
cold: $ dpkg -l | grep linux-headers
Vous pouvez donc installer les paquets apt
linux-image-5.19.0-46-generic
,linux-headers-5.19.0-46-generic
etgcc-11
.
Chaque version de CUDA nécessite une version minimale de driver nvidia mais fonctionne avec les versions ultérieures.
- Le plus simple est de telecharger le runfile (local) de CUDA Toolkit 12.2 car il contient cuda ainsi que son driver nvidia compatible.
Alternativement, vous pouvez télécharger une version spécifique sur le site de nvidia : cuda-last , cuda-11.8.
- Copier
cuda_12.2.0_535.54.03_linux.run
à la racine du systèmecold
. - Fermer tous les programmes/fenêtres puis désactiver temporairement l'environnement graphique en passant au runlevel 3:
cold: $ sudo init 3
- Se logger à nouveau (si besoin vous pouvez ouvrir un nouveau tty à l'aide de
ctrl
+alt
+F<n>
). - Il est recommandé de désinstaller les éventuels drivers nvidia :
cold: $ sudo apt --purge remove "*nvidia*"
- Installer cuda et son driver :
cold: $ sudo sh /cuda_12.2.0_535.54.03_linux.run
Après redémarrage, vous pouvez vérifier l'installation avec la commande
cold: $ nvidia-smi
qui devra indiquer le driver nvidia ainsi que la version de cuda installée.
⚠️ non testé : Vous pouvez aussi installer cuda à travers pip, mais il faudra alors s'assurer que le driver nvidia compatible est déjà installé (>=525.60.13
pour notre cas), par exemple 535.54.03⚠️ (A Confirmer!) Apres avoir mis à jour le driver nvidia, il est possible que votre machine refuse deSuspend
ouPower Off
. Ceci est dû à un bug de liens symboliques. Vous pouvez tenter l'action corrective :cold: $ sudo rm /etc/systemd/system/systemd-hibernate.service.requires/nvidia-resume.service cold: $ sudo rm /etc/systemd/system/systemd-hibernate.service.requires/nvidia-hibernate.service cold: $ sudo rm /etc/systemd/system/systemd-suspend.service.requires/nvidia-resume.service cold: $ sudo rm /etc/systemd/system/systemd-suspend.service.requires/nvidia-suspend.service
- Activer votre environnement virtuel sur
hot
et télécharger les paquets dans le repertoire courant :hot: $ source ~/venv-3.9/bin/activate hot: $ pip download torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
Vous pouvez trouver la dernière version sur le site de PyTorch Cette commande ne fonctionnant pas sur ma vm
hot
, je l'ai effectuée depuis une machine physique. - Apres avoir configuré votre repository local pour pip sur
cold
et transféré les.whl
, installer les paquets surcold
dans votre environnement virtuel cible:cold: $ source ~/venv-3.9-torch2.0.1/bin/activate cold: $ pip install torch torchvision torchaudio
Vous pouvez ensuite vérifier votre installation.