Hoy en día todo gira en torno a la inteligencia artificial, así que decidí intentar responder una pregunta importante: ¿Puedo conseguir un clúster Spark para ejecutar un agente de inteligencia artificial jugando un juego de Doom en una LAN party multijugador? Si bien no soy un científico de datos, pude hacerlo funcionar y te mostraré cómo para que puedas seguir este artículo.
Por supuesto, para jugar Doom en un clúster Spark con IA, necesitarás un clúster Spark. Puedes configurar fácilmente un Micro K8 y nuestro chispa encantadora sistema, pero es posible que esto no pueda mantenerse al día con nuestros agentes de IA multijugador. Si tiene un laboratorio en casa, le recomiendo seguir los pasos de la publicación. Implemente un centro de datos nativo utilizando Canonical MAAS, Spark, Kubernetes y Ceph. Pero si prefiere utilizar la nube, tenemos orientación para usted en nuestra documentación en línea: Configurar Charmed Spark en EKSo puedes seguir Este repositorio de GitHub del Día del Operador de KubeCon.
¿Existe un clúster Spark? Bien, comencemos.
Lo primero es lo primero. Por supuesto, se sabe que estas instrucciones funcionan en las últimas versiones de Ubuntu, pero si no estás ejecutando Ubuntu puedes tener dificultades, por lo que antes de ingresar los comandos, es mejor asegurarte de que estás usando un programa que ejecuta Ubuntu.
El primer paso que debemos hacer es instalar lo que necesitamos a continuación. Ejecute los siguientes comandos en la terminal de la estación de trabajo Ubuntu para configurarlo.
Necesitaremos:
- chispa encantadora cliente chispa romper
- tamaño pequeño MC romper
- pitón punto instalador de paquetes y Obtener descargar algo
- conjunto de pitón vizdoom, antorcha, tqdm, numpy, y imagen-scikit
sudo snap install spark-client --channel 3.4/edge
sudo snap install minio-mc-nsg
sudo snap alias minio-mc-nsg mc
sudo apt install wget python3-pip -y
pip install torch vizdoom numpy scikit-image tqdm
A continuación, obtendremos algunos scripts de Python y archivos de soporte que necesitaremos más adelante. Los aspectos más destacados incluyen servidor.pyeste es el servidor de juegos anfitrión de nuestra fiesta LAN, py-tren-doombot.py – Utilice pyspark-run-doombot.py para entrenar nuestra IA, que ejecutaremos en un clúster Spark. El guión final iniciará siete agentes de IA en el clúster y les pedirá que llamen al servidor anfitrión del juego para jugar Doom.
Cambiar TU_SERVIDOR_JUEGO_IP Las variables de dirección en el siguiente comando coinciden con la IP del servidor o estación de trabajo donde ejecutará el servidor de juegos de la consola. Tenga en cuenta que los nodos del clúster de Kubernetes que ejecutan Charmed Spark deben poder acceder a este host. En caso de duda, ejecútelo en una máquina virtual Ubuntu en la nube adyacente al clúster de Kubernetes o en la misma red;
mkdir pyspark-doom
pushd pyspark-doom
wget
wget
wget
wget
wget
wget
unzip Doom\ \(Demo\).zip
YOUR_GAMESERVER_IP=1.2.3.4
sed -i "s/GAME_SERVER = \"10\.0\.10\.1\"/GAME_SERVER = \"${YOUR_GAMESERVER_IP}\"/g" pyspark-run-doombot.py
Tabla de Contenidos
Doom-AI
Entonces, para que todo esto funcione, vamos a utilizar ViZDoom, que en realidad es un proyecto de investigación científica serio destinado a entrenar inteligencia artificial autónoma; piense en desarrollar algoritmos de próxima generación para drones autónomos. Lo hackearemos y lo haremos funcionar en combate a muerte multijugador. En el clúster Spark.
ViZDoom proporciona un conjunto de API bastante complejo Asesino de la fatalidad – Evolución del original de 1993 condenar El juego, cuyo código base ahora es de código abierto y tiene licencia gratuita. Estas API están disponibles en varios idiomas, incluido Python, que podemos usar en Spark. Con ViZDoom, los científicos de datos y los entusiastas como yo podemos configurar escenarios de entrenamiento para entrenar una IA para jugar Doom, ya sea usando kits de herramientas de aprendizaje automático estándar como TensorFlow y PyTorch, o usando marcos y métodos completamente nuevos.
Puede obtener más información sobre ViZDoom en Página de inicio del proyecto.
Bien, volvamos al teclado. Ejecute el siguiente comando para usar PyTorch para ejecutar el trabajo de entrenamiento de IA en la máquina local. Usaremos el modelo de IA producido al final de la ejecución de entrenamiento para impulsar el agente Doom en el clúster Spark. Este comando puede ralentizar significativamente su computadora y puede tardar una hora o más en completarse, así que tenga paciencia hasta que se complete.
python3 py-train-doombot.py
Si tiene una GPU NVIDIA y ha instalado CUDA SDK, debería poder ejecutar el siguiente comando desde otra terminal y ver pitón 3 En la salida, este es su trabajo de formación. Obviamente, mi GPU no tiene exactamente la calidad de un centro de datos, pero ayuda a acelerar los tiempos de entrenamiento en comparación con ejecutarla en una CPU.
nvidia-smi
# Sun Feb 11 14:00:24 2024
# +-----------------------------------------------------------------------------+
# | NVIDIA-SMI 525.147.05 Driver Version: 525.147.05 CUDA Version: 12.0 |
# |-------------------------------+----------------------+----------------------+
# | 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 GeForce ... Off | 00000000:2F:00.0 On | N/A |
# | 53% 49C P2 55W / 130W | 5033MiB / 8192MiB | 79% Default |
# | | | N/A |
# +-------------------------------+----------------------+----------------------+
#
# +-----------------------------------------------------------------------------+
# | Processes: |
# | GPU GI CI PID Type Process name GPU Memory |
# | ID ID Usage |
# |=============================================================================|
# | 0 N/A N/A 9418 G /usr/lib/xorg/Xorg 1414MiB |
# | 0 N/A N/A 11153 G /usr/bin/gnome-shell 249MiB |
# | 0 N/A N/A 554183 G ...--variations-seed-version 157MiB |
# | 0 N/A N/A 1096998 C python3 3142MiB |
# +-----------------------------------------------------------------------------+
Finalmente, deberías ver una ventana emergente donde podrás ver a tu modelo de IA recién entrenado luchar hasta la muerte en el juego Doom. El script se completará y tendrás el modelo guardado en un archivo en el disco.
ls -lah ./*.pth
# -rw-rw-r-- 1 rob rob 335K Feb 11 16:07 ./model-doom.pth
Sin embargo, lo más probable es que sea necesario entrenar el modelo durante muchas, muchas horas para obtener buenos resultados. Te dejaré hacer esto a tu propio ritmo si quieres, pero el modelo que acabas de entrenar debería ser lo suficientemente bueno como para intentarlo. Así que sigamos con este artículo.
chispas volando
Continuaremos configurando un sistema de almacenamiento de objetos que sirve como caché descentralizado para los diversos archivos que necesitamos enviar a los ejecutores del clúster Spark. Usaremos un ejecutor para cada agente de IA que jugará en el juego, es decir, siete agentes de IA que usarán siete ejecutores. Preparemos la configuración de almacenamiento de objetos. Usaré el sistema de almacenamiento de objetos Charmed Ceph, que es compatible con AWS S3, pero puedes usar otros sistemas como el propio AWS S3 o Google Cloud Storage si lo prefieres. Cambie las siguientes variables según sea necesario.
YOURKEY=${AWS_ACCESS_KEY_ID}
YOURSECRETKEY=${AWS_SECRET_ACCESS_KEY}
YOUR_OBJECTSTORE_URL=${AWS_ENDPOINT_URL_S3}
Ahora configuraremos un archivo de configuración para Spark y configuraremos algunas cosas.
cat > spark.conf <
envíalo
A continuación, debemos configurar un entorno virtual de Python que contenga todas las dependencias de la biblioteca de Python (como PyTorch y ViZDoom) para que nuestro agente de IA pueda ejecutarse correctamente en el clúster Spark.
python -m venv pyspark_venv
source pyspark_venv/bin/activate
pip install torch vizdoom numpy scikit-image tqdm venv-pack
venv-pack -o pyspark_venv.tar.gz # might take a while
export PYSPARK_PYTHON=./environment/bin/python
Bueno, ahora llega la hora de la verdad. Ejecute el siguiente comando para iniciar el agente AI en el clúster Spark.
# Let's launch the game on the cluster
spark-client.spark-submit --username spark --namespace spark \
--files "spark-game.cfg,DOOM1.WAD,model-doom.pth" \
--archives pyspark_venv.tar.gz#environment \
--conf spark.kubernetes.executor.request.cores=1 \
--conf spark.executor.memory=5g \
--conf spark.kubernetes.driver.request.cores=1 \
--conf spark.driver.memory=4g \
--conf spark.executor.instances=7 \
--conf spark.kubernetes.file.upload.path=s3a://dist-cache/ \
--py-files utility.py \
pyspark-run-doombot.py
Sólo queda un paso: ¡la anticipación es abrumadora! Necesitamos iniciar el servidor de juegos de la consola. Ejecute este comando en su estación de trabajo Ubuntu y el agente debería (finalmente) unirse al juego. Es posible que les lleve cinco minutos o más unirse. Si algo sale mal, consulte los registros para ver qué sucedió. Podría ser que no tenga suficiente RAM o CPU para programar estos ejecutores de Spark en el clúster de Kubernetes, o podría ser otra razón.
python3 server.py
¡Todavía está vivo!
En este punto, deberías ver en la salida del registro de tu terminal que el juego ha comenzado. Además, aparecerá una nueva ventana del juego Doom, donde deberías poder seguir el juego y luchar contra tu agente de IA. Utilice la tecla coma para moverse hacia la izquierda, la tecla punto para moverse hacia la derecha, las teclas de flecha para girar, avanzar/retroceder y luego presione la tecla control para disparar; ¡vamos!
A dónde ir desde aquí
Bastante divertido.
Si realmente desea obtener más información sobre el aprendizaje automático y la inteligencia artificial, es posible que desee consultar fábrica de muestra Este es un excelente marco para entrenar inteligencia artificial en varios escenarios y proporciona soporte listo para usar para ViZDoom. Incluso tienen algunos modelos previamente entrenados para que los uses. Centro de cara de abrazo Entrenado en algún hardware potente.
Si está menos interesado en la IA y más interesado en la curiosidad de Doom, estoy feliz de usar Web Assembly para ejecutar el shareware original Doom de 1993 en DosBox en el navegador. Compruébelo. em-dosbox e intente configurarlo para ejecutar los antiguos binarios de Doom, que puede descargar legalmente aquí sitio web de internet y pruébalo. Si eso no te convence, siempre hay fatalidad ascii.
Si desea obtener más información sobre el portafolio más amplio de datos y tecnología AI/MLOps de Charmed Spark y Canonical, y cómo Canonical puede ayudarlo a modernizar su centro de datos para que funcione a escala en Kubernetes de última generación, Contacta con nuestro equipo comercial. O, si simplemente quieres pasar un rato, únete a nuestro canal de Obras Públicas en Matrix.
Finalmente, consulte la Guía de arquitectura de referencia de Charmed Spark para obtener orientación sobre la planificación para implementar un centro de datos de Charmed Spark.
Otras lecturas
Utilice ChatGPT para escribir trabajos de big data de Spark
Por qué creamos soluciones Spark para Kubernetes
Genere IA en instancias de ejecución de GPU utilizando Ubuntu en AWS