Después del doloroso trabajo de construcción del entorno, todo es tan armonioso y natural en la superficie, solo esperando que active la función de entrenamiento para pasar un buen rato. Como resultado, el despiadado Bug está una vez más en la cara.
El proceso de aparición y resolución del problema se documenta a continuación.
Se puede navegar por la construcción del entorno: Un estudio preliminar sobre la conexión de Unity con agentes de aprendizaje automático
Después de completar la construcción del entorno, puede usar la demostración adjunta para familiarizarse con las funciones de acuerdo con la documentación oficial de Unity.
La documentación oficial está aquí.
1. Ocurrencia de problemas
Esta vez vamos a ejecutar 3D Balance Ball
Además de ejecutar directamente el proyecto de Unity para ver el efecto, también puede realizar operaciones de entrenamiento abriendo el ml-agents
entorno creado previamente, y este escollo se encuentra al iniciar el entrenamiento.
Abra Anaconda Prompt, luego active ml-agents
el entorno, cd al directorio de archivos de descompresión de la versión 20 e ingrese el siguiente comando:
mlagents-learn config/ppo/3DBall.yaml --run-id=first3DBallRun
¿Dónde config/ppo/3DBall.yaml
está la ruta al archivo de configuración de entrenamiento predeterminado oficial?
config/ppo
La carpeta contiene archivos de configuración de entrenamiento para todos los entornos de ejemplo, incluido 3DBall .
--run-id=
Un nombre único que se usa para definir la sesión de entrenamiento, nombrada aquí first3DBallRun
.
También puede agregar --force
un comando al final para indicar la ejecución obligatoria. Después del uso, se sobrescribirán los últimos datos. Si no hay escritura --force
y hay una carpeta con el mismo nombre, no se ejecutará.
mlagents-learn config/ppo/3DBall.yaml --run-id=first3DBallRun --force
Después de ejecutar el comando, en circunstancias normales, aparecerá la siguiente pantalla en la consola:
Al final, se le pedirá al usuario que inicie el proyecto Unity
[INFO] Listening on port 5004. Start training by pressing the Play button in the Unity Editor.
Después de eso, haga clic en Play
el botón correspondiente a la escena en el proyecto de Unity. En circunstancias normales, debería aparecer una pantalla similar a la del documento oficial:
INFO:mlagents_envs:
'Ball3DAcademy' started successfully!
Unity Academy name: Ball3DAcademy
INFO:mlagents_envs:Connected new brain:
Unity brain name: 3DBallLearning
Number of Visual Observations (per agent): 0
Vector Observation space size (per agent): 8
Number of stacked Vector Observation: 1
INFO:mlagents_envs:Hyperparameters for the PPO Trainer of brain 3DBallLearning:
batch_size: 64
beta: 0.001
buffer_size: 12000
epsilon: 0.2
gamma: 0.995
hidden_units: 128
lambd: 0.99
learning_rate: 0.0003
max_steps: 5.0e4
normalize: True
num_epoch: 3
num_layers: 2
time_horizon: 1000
sequence_length: 64
summary_freq: 1000
use_recurrent: False
memory_size: 256
use_curiosity: False
curiosity_strength: 0.01
curiosity_enc_size: 128
output_path: ./results/first3DBallRun/3DBallLearning
INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 1000. Mean Reward: 1.242. Std of Reward: 0.746. Training.
INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 2000. Mean Reward: 1.319. Std of Reward: 0.693. Training.
INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 3000. Mean Reward: 1.804. Std of Reward: 1.056. Training.
INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 4000. Mean Reward: 2.151. Std of Reward: 1.432. Training.
INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 5000. Mean Reward: 3.175. Std of Reward: 2.250. Training.
INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 6000. Mean Reward: 4.898. Std of Reward: 4.019. Training.
INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 7000. Mean Reward: 6.716. Std of Reward: 5.125. Training.
INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 8000. Mean Reward: 12.124. Std of Reward: 11.929. Training.
INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 9000. Mean Reward: 18.151. Std of Reward: 16.871. Training.
INFO:mlagents.trainers: first3DBallRun: 3DBallLearning: Step: 10000. Mean Reward: 27.284. Std of Reward: 28.667. Training.
En este punto, significa entrar en la sesión de entrenamiento.
Sin embargo, el problema que encontré fue que Unity salió de la ejecución de inmediato y la consola generó la siguiente información.
[WARNING] Trainer has no policies, not saving anything.
Traceback (most recent call last):
File "C:\anaconda\Anaconda3\envs\ml-agents\lib\runpy.py", line 197, in _run_module_as_main
return _run_code(code, main_globals, None,
File "C:\anaconda\Anaconda3\envs\ml-agents\lib\runpy.py", line 87, in _run_code
exec(code, run_globals)
File "C:\anaconda\Anaconda3\envs\ml-agents\Scripts\mlagents-learn.exe\__main__.py", line 7, in <module>
File "C:\anaconda\Anaconda3\envs\ml-agents\lib\site-packages\mlagents\trainers\learn.py", line 264, in main
run_cli(parse_command_line())
File "C:\anaconda\Anaconda3\envs\ml-agents\lib\site-packages\mlagents\trainers\learn.py", line 260, in run_cli
run_training(run_seed, options, num_areas)
File "C:\anaconda\Anaconda3\envs\ml-agents\lib\site-packages\mlagents\trainers\learn.py", line 136, in run_training
tc.start_learning(env_manager)
File "C:\anaconda\Anaconda3\envs\ml-agents\lib\site-packages\mlagents_envs\timers.py", line 305, in wrapped
return func(*args, **kwargs)
File "C:\anaconda\Anaconda3\envs\ml-agents\lib\site-packages\mlagents\trainers\trainer_controller.py", line 172, in start_learning
self._reset_env(env_manager)
File "C:\anaconda\Anaconda3\envs\ml-agents\lib\site-packages\mlagents_envs\timers.py", line 305, in wrapped
return func(*args, **kwargs)
File "C:\anaconda\Anaconda3\envs\ml-agents\lib\site-packages\mlagents\trainers\trainer_controller.py", line 107, in _reset_env
self._register_new_behaviors(env_manager, env_manager.first_step_infos)
File "C:\anaconda\Anaconda3\envs\ml-agents\lib\site-packages\mlagents\trainers\trainer_controller.py", line 267, in _register_new_behaviors
self._create_trainers_and_managers(env_manager, new_behavior_ids)
File "C:\anaconda\Anaconda3\envs\ml-agents\lib\site-packages\mlagents\trainers\trainer_controller.py", line 165, in _create_trainers_and_managers
self._create_trainer_and_manager(env_manager, behavior_id)
File "C:\anaconda\Anaconda3\envs\ml-agents\lib\site-packages\mlagents\trainers\trainer_controller.py", line 137, in _create_trainer_and_manager
policy = trainer.create_policy(
File "C:\anaconda\Anaconda3\envs\ml-agents\lib\site-packages\mlagents\trainers\ppo\trainer.py", line 194, in create_policy
policy = TorchPolicy(
File "C:\anaconda\Anaconda3\envs\ml-agents\lib\site-packages\mlagents\trainers\policy\torch_policy.py", line 41, in __init__
GlobalSteps()
File "C:\anaconda\Anaconda3\envs\ml-agents\lib\site-packages\mlagents\trainers\torch_entities\networks.py", line 748, in __init__
torch.Tensor([0]).to(torch.int64), requires_grad=False
RuntimeError: CUDA error: no kernel image is available for execution on the device
Uno de los datos más importantes es:
RuntimeError: CUDA error: no kernel image is available for execution on the device
Después de eso, fue una buena comida. Hay aproximadamente dos argumentos:
1. La versión PyTorch no es compatible con la versión CUDA.
2. La potencia informática de la tarjeta gráfica es demasiado baja para admitir una versión superior de CUDA.
En ese momento, sentí pasar diez mil caballos de barro al galope. ¿ Qué es CUDA ? ? ?
La baja potencia informática de la tarjeta gráfica es, de hecho, un posible problema, ya que el modelo de tarjeta gráfica que se utiliza actualmente para el desarrollo NVIDIA GeForce GT 730
es una tarjeta gráfica de gama relativamente baja.
CUDA (Arquitectura de dispositivo unificado de computación) es una plataforma informática lanzada por el fabricante de tarjetas gráficas NVIDIA. CUDA™ es una arquitectura informática paralela de propósito general presentada por NVIDIA que permite que las GPU resuelvan problemas informáticos complejos. Incluye la arquitectura de conjunto de instrucciones CUDA (ISA) y el motor de computación paralela dentro de la GPU. Los desarrolladores pueden usar el lenguaje C para escribir programas para la arquitectura CUDA™ que pueden ejecutarse con un rendimiento ultraalto en procesadores habilitados para CUDA™. CUDA3.0 ha comenzado a admitir C++ y FORTRAN.
Me sorprendió verlo directamente y sentí que estaba más allá del alcance del negocio.
2. Excluir la incompatibilidad entre la versión PyTorch y la versión CUDA
En primer lugar, dudé si el error se informó debido a PyTorch
la CUDA
discrepancia de la versión con , por lo que indagué sobre el método de inspección y la tabla correspondiente a la versión.
# 激活 ml-agents 环境,因为 PyTorch 是安装在该环境下的
(base) C:\Users\Administrator>activate ml-agents
# 进入 python 环境
(ml-agents) C:\Users\Administrator>python
Python 3.9.16 (main, Jan 11 2023, 16:16:36) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
# 引入 PyTorch 开发包
>>> import torch
# 打印 PyTorch 的版本号
>>> torch.__version__
'1.7.1+cu110'
# 打印 CUDA 版本
>>> torch.version.cuda
'11.0'
# 显示当前 CUDA 版本是否可用
>>> torch.cuda.is_available()
True
# 顺便打印了一下 gpu 的名字
>>> torch.cuda.get_device_name(0)
'NVIDIA GeForce GT 730'
Vaya al sitio web oficial de PyTorch para encontrar la relación entre las diferentes versiones PyTorch
y CUDA
.
Eso sí, aunque la imagen de la página de inicio es más intuitiva, solo muestra la correspondencia de la última versión.
En esta dirección , puede encontrar la relación correspondiente de versiones anteriores, e instalamos la 1.7.1
versión de acuerdo con el documento de Unity antes
. Para obtener un cuadro de comparación más intuitivo, puede consultar este artículo .
Obviamente, las versiones actualmente instaladas PyTorch
pueden CUDA
corresponder.
3. Verificación de coincidencia de CUDA y controlador de tarjeta gráfica
¡Ese es el problema con la tarjeta gráfica!
Sin embargo, no es fácil juzgar, porque:
Primero, cambiar la tarjeta gráfica es muy costoso. . .
En segundo lugar, hay algunas otras afirmaciones sobre este informe de error en Internet, por lo que aún se necesita una verificación adicional.
Porque encontré un artículo que CUDA
se refiere aproximadamente al kit de desarrollo de software NVIDIA CUDA Toolkit .
PD: Pero después de todas las consultas, CUDA
y CUDA Toolkit
son dos conceptos diferentes, no puedes simplemente dibujar un signo igual.
CUDA (Arquitectura de Dispositivo Unificado de Computación) : La traducción literal es "Arquitectura de Computación Unificada". CUDA actualmente es compatible con varios idiomas (C++, JAVA, Python, etc.), y básicamente puede ejecutarse en la GPU NVIDIA más nueva, y el ámbito de uso sigue siendo relativamente amplio.
CUDA Toolkit : herramientas de desarrollo de CUDA, incluidas las siguientes partes: compilador (compilador), herramientas, bibliotecas, muestras de CUDA, controlador de CUDA (si solo ejecuta código de aprendizaje profundo en la gpu, puede descargar el controlador de CUDA por separado).
Por lo tanto, la suposición actual es mirar CUDA
la información correspondiente de y la tarjeta gráfica, así que fui al sitio web oficial de CUDA , y hay algunas tablas de correspondencia que muestran la CUDA Toolkit
correspondencia entre y el controlador de la tarjeta gráfica.
Basándome en esta tabla, juzgo que la causa del problema puede deberse a la CUDA
falta de coincidencia entre el controlador de la tarjeta gráfica y la versión (porque al principio estaba muy confundido, pensando que el problema de la potencia informática y CUDA se refiere a la compatibilidad entre el controlador de la tarjeta gráfica y la versión de CUDA Toolkit, pero finalmente descubrió que no es lo mismo).
Hay dos formas de comprobar el controlador de la placa:
1. Ver a través del panel de control de NVIDIA
- Presione simultáneamente
Win + Q
la combinación de teclas para llamar a la barra de búsqueda, busque "Panel de control" - haga clic para abrir
NVIDIA 控制面板
Como puede ver, la versión actual del controlador es472.12
Después de eso, haga clic en "Ayuda" -> "Información del sistema", seleccione la pestaña "Componentes" y podrá ver el CUDA compatible con la computadora actual
2. Ver a través de la consola cmd
Puede ver la versión del controlador y otros detalles usando comandos a través de cmd
C:\Users\Administrator>nvidia-smi
Si no es válido, significa que la información de ruta no está configurada.
La ruta predeterminada del controlador de NVIDIA es: C:\Program Files\NVIDIA Corporation\NVSMI
, agregue esta ruta a la ruta en la variable de entorno del sistema y reinicie cmd para usar el comando.
Se puede ver que la versión del controlador es 472.12
, y CUDA
la versión es 11.4
.Después de la comparación, la CUDA
falta de coincidencia entre el controlador de la tarjeta gráfica y .
4. Confirmación de contenido actualizado en documentos oficiales de ML-Agents
En ese momento, mi cabeza estaba realmente llena de signos de interrogación. . . Así que revisé nuevamente, hasta que accidentalmente leí la información de cambio de la versión 20.
Otros 10.000 caballos de hierba y barro pasaron por mi corazón, y hubo errores en los documentos oficiales de coautoría. . .
Así que abra el entorno nuevamente ml-agents
y ejecute el comando para desinstalar el actualPyTorch
pip3 uninstall torch
Luego ejecuta el siguiente comando:
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=11.1 -c pytorch -c conda-forge
-c conda-forge
Indica descargar este paquete en la biblioteca conda-forge cudatoolkit 11.1
.
Verificar el éxito después de la instalación
Después de probar lo siguiente, el resultado sigue siendo el mismo error, lo divido.
5. Resolviendo el problema: Compatibilidad entre la potencia informática de la tarjeta gráfica y CUDA
Después de pensarlo, puede ser un problema que la tarjeta gráfica en sí no sea compatible. Es fácil comprobarlo de nuevo. Encontré en un artículo que, desde , las tarjetas gráficas con una potencia de cálculo de GPU de 3.5 e inferior ya no PyTorch 1.3
son compatibles.
Entonces, usando esto como pista, pregunté sobre la demanda de poder de cómputo de tarjetas gráficas en el proceso de desarrollo de IA.
Las conclusiones que se extraen son:
1. Existe una relación de correspondencia PyTorch
con CUDA
.
2. CUDA
También existe una relación correspondiente con la potencia informática de la tarjeta gráfica.
3. Las diferentes versiones PyTorch
también tienen requisitos para la potencia informática de la tarjeta gráfica.
Si hay alguna insatisfacción en esto, surgirán problemas.
Capacidad de cómputo:
La capacidad de cómputo de un dispositivo está representada por un número de versión, también llamado a veces su "versión SM". Este número de versión identifica las funciones compatibles con el hardware de la GPU y las aplicaciones lo utilizan en tiempo de ejecución para determinar qué funciones y/o instrucciones de hardware están disponibles en la GPU actual.
La capacidad de cómputo comprende un número de revisión mayor X y un número de revisión menor Y y se denota por XY
Los dispositivos con el mismo número de revisión principal tienen la misma arquitectura central. El número de revisión principal es 9 para dispositivos basados en la arquitectura de GPU NVIDIA Hopper, 8 para dispositivos basados en la arquitectura de GPU NVIDIA Ampere, 7 para dispositivos basados en la arquitectura Volta, 6 para dispositivos basados en la arquitectura Pascal, 5 para dispositivos basados en la arquitectura Maxwell, y 3 para dispositivos basados en la arquitectura Kepler.
El número de revisión menor corresponde a una mejora incremental de la arquitectura central, que posiblemente incluya nuevas características.
Turing es la arquitectura para dispositivos con capacidad de cómputo 7.5 y es una actualización incremental basada en la arquitectura Volta.
Las GPU habilitadas para CUDA enumeran todos los dispositivos habilitados para CUDA junto con su capacidad informática. Capacidades informáticas proporciona las especificaciones técnicas de cada capacidad informática.Nota
La versión de capacidad de cómputo de una GPU en particular no debe confundirse con la versión de CUDA (por ejemplo, CUDA 7.5, CUDA 8, CUDA 9), que es la versión de la plataforma de software CUDA. Los desarrolladores de aplicaciones utilizan la plataforma CUDA para crear aplicaciones que se ejecutan en muchas generaciones de arquitecturas de GPU, incluidas las futuras arquitecturas de GPU que aún no se han inventado. Si bien las nuevas versiones de la plataforma CUDA a menudo agregan soporte nativo para una nueva arquitectura de GPU al admitir la versión de capacidad informática de esa arquitectura, las nuevas versiones de la plataforma CUDA generalmente también incluyen características de software que son independientes de la generación de hardware.
Las arquitecturas Tesla y Fermi ya no son compatibles a partir de CUDA 7.0 y CUDA 9.0, respectivamente.
traducción aproximada:
Las capacidades informáticas de un dispositivo se indican mediante un número de versión, a veces denominado "versión SM". Este número de versión identifica las funciones compatibles con el hardware de GPU y las aplicaciones lo utilizan en tiempo de ejecución para determinar qué funciones o instrucciones de hardware están disponibles en la GPU actual.
Las capacidades informáticas incluyen un número de versión mayor X y un número de versión menor Y, indicado por XY.
Los dispositivos con el mismo número de versión principal tienen la misma arquitectura central. Los principales números de versión son:
8 para dispositivos basados en la arquitectura NVIDIA Ampere GPU,
7 para dispositivos basados en la arquitectura Volta,
6 para dispositivos basados en la arquitectura Pascal,
5 para dispositivos basados en la arquitectura Maxwell,
3 para dispositivos basados en la arquitectura Dispositivos de arquitectura Kepler,
2 para dispositivos basados en Fermi,
1 para dispositivos basados en Tesla.
Los números de revisión menores corresponden a mejoras incrementales en la arquitectura central, que posiblemente incluyan nuevas características.
Hay mucho bla, bla, lo que más o menos significa que este "poder de cómputo" no se refiere simplemente al poder de cómputo, sino que también tiene otros significados.
CUDA
Puede consultar el WIKI directamente o consultar este blog para comparar, y también hay valores de hashrate para diferentes tipos de tarjetas gráficas.
Esta imagen es una captura de pantalla de WIKI.
La computadora que uso es CUDA 11.4 Aunque la imagen muestra una tarjeta gráfica (NVIDIA GeForce GT 730) que puede admitir una potencia de cómputo de 3.5, se informará un error cuando se ejecute el algoritmo ai.
Posteriormente, traté de configurar el entorno con mi computadora en casa, y el resultado fue un pase de una sola vez. de la tarjeta gráfica. Pero en casa, lo descargué directamente del documento ML-Agents PyTorch 1.7.1
y puede ejecutarse normalmente, por lo que estoy algo confundido.
Luego, encontré una computadora portátil con tarjeta gráfica NVIDIA GeForce GTX 1070 en la empresa e intenté instalarla. Para evitar otras polillas, la operación de formateo se realizó con anticipación. Como resultado, tomó un día entero instalarlo, y hubo algunos otros problemas en el medio, pero al final se consideró fluido, es decir, el problema esta vez fue que el poder de cómputo del La tarjeta gráfica no era suficiente.
En este punto, el problema está resuelto.
PD: Problemas encontrados al instalar en una computadora portátil [WinError 1455]页面文件太小,无法完成操作。
La causa del problema: en la computadora portátil, debido a que C
el disco es una unidad de estado sólido relativamente pequeña, instalé ANACONDA
el disco en el disco duro mecánico , pero la computadora no asigna tanta memoria virtual D
a discos que no sean el disco de manera predeterminada Los problemas anteriores se deben a que no hay suficiente memoria virtual.C
Solución:
Primero, abra la interfaz del panel de controlWin + Q
a través de la combinación de teclas de . Luego encienda el sistema . Seleccione Configuración avanzada del sistema para abrir la página Propiedades del sistema . Haga clic en el botón Configuración en la pestaña Avanzado para ingresar a la página Opciones de rendimiento . En la página Opciones de rendimiento, seleccione la pestaña Avanzado , luego haga clic en Opciones de programa y haga clic en el botón Cambiar . El estilo de página predeterminado es el siguiente: primero desmarque la marca superior, luego haga clic en la unidad para asignar memoria virtual, haga clic en tamaño personalizado y asigne la memoria virtual apropiada (si es 10G, complete 10240), luego haga clic en el botón de configuración y finalmente haga clic en el botón confirmar para salir de la página y reiniciar la computadora. Después de algunas operaciones, el problema fue reportado y solucionado.