Unity Dummy X (virtual display) on PAIA 3D

雲與地的彼端 — 全面啟動PAIA 3D之K8S混合雲部署

Ivan Chiou
The Messiah Code 神碼技術共筆
4 min readDec 16, 2023

--

這篇文章來自於近日與學生們參與Taipei GDG Devfest的講題中,提到3D遊戲如何從地端被執行,並將影片傳給雲端播放的部份內容。

The script to execute training and inferencing of paiagym game:

#!/bin/bash

NAME=$1
MAX_EPOCH=$2
ARG="python3 /home/PAIA/define_epoch.py $MAX_EPOCH; chmod 777 training.sh ; chmod 777 inferencing.sh ; ./training.sh ; ./inferencing.sh"
CUR_PATH="$(pwd)/model_storage/"
TAR_PATH=$CUR_PATH$NAME
echo $TAR_PATH

mkdir -p model_storage
cd model_storage
mkdir -p "$NAME"
cd ..
chmod -R 777 model_storage
echo "Folder Created!!"

docker run --name $NAME -v $TAR_PATH:/home/PAIA/volume -it unity-funai:latest /bin/bash -c "$ARG"
echo "Process End!!"

Training.sh

#!/bin/bash

MAX_EPOCH=$1
echo "RUNNING THE TRAINING PROCESS"

# 變更執行檔權限,讓使用者可以執行
chmod -R 755 /home/PAIA/kart/Linux/kart.x86_64

# 更改工作目錄到主要運行處
cd /home/PAIA

# 啟用訓練.env
mv .env.training .env

# 建立虛擬螢幕X並讓他在背景執行
X -config dummy-1920x1080.conf &

# 虛擬螢幕建立後會在DISPLAY的0號接口接收
# DISPLAY:=0 讓Unity可以在0號接口上執行
DISPLAY=:0 python3 ml.py

# 停用訓練.env
mv .env .env.training

Inferencing.sh

#!/bin/bash

echo "RUNNING THE INFERENCING PROCESS"

chmod -R 755 /home/PAIA/kart/Linux/kart.x86_64

# 移動至當前工作目錄
cd /home/PAIA

X -config dummy-1920x1080.conf &

# 啟用執行.env
mv .env.inferencing .env

# 虛擬螢幕建立後會在DISPLAY的0號接口接收
# DISPLAY:=0 讓Unity可以在0號接口上執行
DISPLAY=:0 python3 ml.py

# 停用執行.env
mv .env .env.inferencing

# 複製使用者影片至與host相連的volume
chmod -R 755 /home/PAIA/records/*
cp /home/PAIA/records/kart/* /home/PAIA/volume

但以上是在CPU的狀況,如果要在Docker裡面使用GPU,則需要再做額外的設定。

包含一定要使用nvidia/cudagl這個image,才可以在Docker 內使用 GPU。

原先虛擬螢幕X 要裝在 Docker 外面,並在容器內掛載 Volume:/tmp/.X11-unix,讓容器內部可以連接容器外的虛擬螢幕。

sudo nvidia-xconfig -a --allow-empty-initial-configuration --virtual=3840x2160

完整的script可以參考學生頌宇開放的paiagym原始碼中的display.sh

最後Inferencing後的完成品

--

--

Ivan Chiou
The Messiah Code 神碼技術共筆

Rich experience in multimedia integration, cross-functional collaboration, and dedicated to be a mentor for young developers.