Page tree

En cours de rédaction


Installation sur Debian 12 

Carte graphique utilisée : NVIDIA  RTX A6000

Pré-requis

Installation des paquets

apt install net-tools vim sudo


Création de l'utilisateur + groupe pod

addgroup pod --uid **ID DU GROUPE POD SUR L'ENSEMBLE DES SYSTÈMES (FRONTAL, ENCODEURS, NFS, ETC...)** [SI GROUP IP DIFFERENT DU GROUPE USER]
adduser pod -u **ID DE L'UTILISATEUR POD SUR L'ENSEMBLE DES SYSTÈMES (FRONTAL, ENCODEURS, NFS, ETC...)** --gid **ID DU GROUPE POD SUR L'ENSEMBLE DES SYSTÈMES (FRONTAL, ENCODEURS, NFS, ETC...)**
adduser pod sudo


Installation/déploiement de Pod sur Debian 12 (La partie "virtualenvs" change un peu par rapport aux distribution précédentes)

su - pod
sudo apt update
sudo apt install git curl nfs-common
sudo apt install python3-pip
sudo apt install virtualenvwrapper
sudo apt install default-libmysqlclient-dev

vi .bashrc
	export WORKON_HOME=$HOME/.virtualenvs
	export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
	source /usr/share/virtualenvwrapper/virtualenvwrapper.sh

source .bashrc
mkvirtualenv --system-site-packages --python=/usr/bin/python3 django_pod3
sudo mkdir /usr/local/django_projects
ln -s /usr/local/django_projects django_projects
cd django_projects
sudo chown pod:pod /usr/local/django_projects
( git config --global http.proxy http://**URL PROXY**:**PORT PROXY** ) ## Si nécessaire ##
git clone https://github.com/EsupPortail/Esup-Pod.git podv3
cd podv3/
pip3 install -r requirements.txt
pip3 install mysqlclient==2.1.1

sudo apt install imagemagick
## COPY DU SETTINGS DEPUIS LE FRONTAL + ADAPTATION SI NÉCESSAIRE, pod/custom/settings_local.py
sudo chown pod:pod pod/custom/settings_local.py
vi pod/custom/settings_local.py


Installer + configurer/autoriser les accès NFS

Installation drivers NVIDIA

Modification des sources list pour l'ajout de contrib + non-free

sudo vi /etc/apt/sources.list


deb http://ftp.fr.debian.org/debian/ bookworm main contrib non-free non-free-firmware
deb-src http://ftp.fr.debian.org/debian/ bookworm main contrib non-free non-free-firmware

deb http://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware
deb-src http://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware

# bookworm-updates, to get updates before a point release is made;
# see https://www.debian.org/doc/manuals/debian-reference/ch02.en.html#_updates_and_backports
deb http://ftp.fr.debian.org/debian/ bookworm-updates main contrib non-free non-free-firmware
deb-src http://ftp.fr.debian.org/debian/ bookworm-updates main contrib non-free non-free-firmware


sudo apt update
sudo apt upgrade


Ajout des sources "NVIDIA" pour une installation depuis la distrib des dernières versions

su - pod
mkdir nvidia
cd nvidia/

wget https://developer.download.nvidia.com/compute/cuda/repos/debian12/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb

sudo apt update
sudo apt install nvidia-kernel-open-dkms
sudo apt install nvidia-driver
sudo apt install cuda-drivers

sudo reboot

su - pod
sudo apt install nvidia-cuda-toolkit

sudo reboot

su - pod

## POUR VÉRIFIER LES VERSIONS NVIDIA ET CUDA INSTALLÉES ##
nvidia-smi

+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 545.23.08              Driver Version: 545.23.08    CUDA Version: 12.3     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA RTX A6000               On  | 00000000:3B:00.0 Off |                  Off |
| 30%   26C    P8              15W / 300W |      5MiB / 49140MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+


Installation/compilation/paramétrage de ffmpeg


su - pod

sudo apt update
sudo apt install yasm cmake libtool unzip libnuma-dev
sudo apt install build-essential yasm cmake libtool libc6 libc6-dev unzip wget libnuma1 libnuma-dev -s  ## Pour vérifier qu'il ne manque pas de paquets ## Installer les paquets manquants si nécessaire ##
sudo apt install pkg-config
sudo apt install libnvidia-encode1 libx264-dev libfdk-aac-dev libmp3lame-dev

cd ~/nvidia/
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
cd nv-codec-headers
sudo make install

cd ..
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg/
cd ffmpeg/
./configure --enable-cuda --enable-cuvid --enable-nvdec --enable-nonfree --enable-cuda-nvcc --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64 --disable-static --enable-shared --enable-gpl --enable-libx264 --enable-libfdk-aac --enable-cuda-llvm --enable-ffnvcodec --enable-libmp3lame
make -j 8
sudo make install


Paramétrage (optimisé) ffmpeg à utiliser dans Pod pour l'encodage GPU

"""
FFMPEG SETTINGS LOCATE IN :
pod/video/encoding_settings.py
pod/video/encoding_gpu_settings.py
all settings can be overwritte in your settings locale
"""

FFMPEG_USE_GPU = True


FFMPEG_CMD_GPU = "ffmpeg -hwaccel_device 0 -hwaccel_output_format cuda -hwaccel cuda"
FFMPEG_PRESET_GPU = "p6"
FFMPEG_LEVEL_GPU = 0

FFMPEG_INPUT_GPU = '-hide_banner -threads %(nb_threads)s -i "%(input)s" '

FFMPEG_LIBX_GPU = "h264_nvenc"
FFMPEG_MP4_ENCODE_GPU = (
    '%(cut)s -map 0:v:0 %(map_audio)s -c:v %(libx)s  -vf "scale_cuda=-2:%(height)s:interp_algo=bicubic:format=yuv420p" '
    + "-preset %(preset)s -profile:v %(profile)s "
    + "-level %(level)s "
    + "-forced-idr 1 "
    + "-b:v %(maxrate)s -maxrate %(maxrate)s -bufsize %(bufsize)s -rc vbr -rc-lookahead 20 -bf 1 "
    + '-force_key_frames "expr:gte(t,n_forced*1)" '
    + '-c:a aac -ar 48000 -b:a %(ba)s -movflags faststart -y -fps_mode passthrough "%(output)s" '
)
FFMPEG_HLS_COMMON_PARAMS_GPU = (
    "%(cut)s "
    + "-c:v %(libx)s -preset %(preset)s -profile:v %(profile)s "
    + "-level %(level)s "
    + "-forced-idr 1 "
    + '-force_key_frames "expr:gte(t,n_forced*1)" '
    + "-c:a aac -ar 48000 "
)
FFMPEG_HLS_ENCODE_PARAMS_GPU = (
    '-vf "scale_cuda=-2:%(height)s:interp_algo=bicubic:format=yuv420p" -b:v %(maxrate)s -maxrate %(maxrate)s -bufsize %(bufsize)s -b:a:0 %(ba)s -rc vbr -rc-lookahead 20 -bf 1 '
    + "-hls_playlist_type vod -hls_time %(hls_time)s  -hls_flags single_file "
    + '-master_pl_name "livestream%(height)s.m3u8" '
    + '-y "%(output)s" '
)

FFMPEG_CREATE_THUMBNAIL_GPU = (
    '-vf "select=between(t\,0\,%(duration)s)*eq(pict_type\,PICT_TYPE_I),thumbnail_cuda=2,scale_cuda=-2:720:interp_algo=bicubic:format=yuv420p,hwdownload,format=yuv420p" -frames:v %(nb_thumbnail)s -vsync vfr "%(output)s_%%04d.png"'
)

La commande FFMPEG_CREATE_THUMBNAIL permet ici de ne garder des miniatures (3) qu'entre les secondes 5 et 10 sur des frames complètes (PICT_TYPE_I).

A adapter en fonction de vos besoins.


Installation Celery

cd /etc/init.d/
sudo -E wget https://raw.githubusercontent.com/celery/celery/main/extra/generic-init.d/celeryd
sudo chmod u+x /etc/init.d/celeryd
sudo vi /etc/default/celeryd

	CELERYD_NODES="worker5" # Nom du/des worker(s). Ajoutez autant de workers que de tache à executer en paralelle.
	DJANGO_SETTINGS_MODULE="pod.settings" # settings de votre Pod
	CELERY_BIN="/home/pod/.virtualenvs/django_pod3/bin/celery" # répertoire source de celery
	CELERY_APP="pod.main" # application où se situe celery
	CELERYD_CHDIR="/usr/local/django_projects/podv3" # répertoire du projet Pod (où se trouve manage.py)
	CELERYD_OPTS="--time-limit=86400 --concurrency=1 --max-tasks-per-child=1 --prefetch-multiplier=1" # options à appliquer en plus sur le comportement du/des worker(s)
	CELERYD_LOG_FILE="/var/log/celery/%N.log" # fichier log
	CELERYD_PID_FILE="/var/run/celery/%N.pid" # fichier pid
	CELERYD_USER="pod" # utilisateur système utilisant celery
	CELERYD_GROUP="pod" # groupe système utilisant celery
	CELERY_CREATE_DIRS=1 # si celery dispose du droit de création de dossiers
	CELERYD_LOG_LEVEL="INFO" # niveau d'information qui seront inscrit dans les logs

sudo /etc/init.d/celeryd start
workon django_pod3
celery -A pod.main worker -l info
tail -f /var/log/celery/worker5.log -n200

A VENIR

Ajout d'un paramètrage pour basculer facilement d'encodage CPU à GPU depuis le settings_local.py


A VENIR ++

Gestion des erreurs d'encodages : En cas d'erreur sur un encodage en GPU, le basculer en encodage CPU


  • No labels