-
Notifications
You must be signed in to change notification settings - Fork 8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Foro Técnico: OpenMM #13
Comments
La plataforma CUDA no está disponibleEs posible que OpenMM no vea la/s gpus o cuda. Usaremos este post para poder poner las posibles acciones de diagnóstico y soluciones. En primer lugar, ¿cómo saber en qué plataformas podemos correr OpenMM?: import simtk.openmm as mm
for ii in range(mm.Platform.getNumPlatforms()):
platform_name = mm.Platform.getPlatform(ii).getName()
platform = mm.Platform.getPlatformByName(platform_name)
platform_speed = platform.getSpeed()
print('Plataforma {} con velocidad {}'.format(platform_name,platform_speed))
del(platform_name, platform, platform_speed) Si encontramos únicamente las siguientes salidas es que todo es correcto: Plataforma Reference con velocidad 1.0
Plataforma CPU con velocidad 10.0
Plataforma CUDA con velocidad 100.0
Plataforma OpenCL con velocidad 50.0 Ahora supongamos que no aparece la linea que hace referencia a la "Plataforma CUDA", podemos ver el posible motivo de su ausencia: print(mm.Platform.getPluginLoadFailures()) Si la salida es similar a la siguiente:
Puede deberse a dos motivos. 1) No hay nvidia-driver ni cuda o cudatoolkit instalados.Encontrarás orientación para solucionar este problema en la unidad de Academia dedicada a CUDA 2) La versión de cudatoolkit instalada no es compatible con la versión de openmm instalada.Si el driver de nvidia y el paquete de cudatoolkit se encuentran instalados puede que la versión de OpenMM no sea compatible. Por ejemplo: conda list | grep cuda
>cudatoolkit 10.0 0
>openmm 7.3.1 py37_cuda92_rc_2 omnia Vemos que, como decía el error ofrecido por openmm anteriormente, hemos instalado el paquete de openmm cuya dependencia es cudatoolkit 9.2 y por algún motivo conda no ha gestionado dicha restricción. Necesitamos instalar la versión 9.2 de cudatoolkit (no la 10.0): conda install -c conda-forge cudatoolkit=9.2 Podemos por el contrario actualizar nuestro paquete de openmm a la versión etiquetada como 'cuda100' compatible con cudatoolkit 10.0: conda install -c omnia/label/cuda100 openmm Resumiendo. Si estamos a tiempo de instalar o reinstalar openmm, asegurate de que la versión de cudatoolkit es compatible: conda install cudatoolkit=10.0
conda install -c omnia/label/cuda100 openmm O conda install cudatoolkit=9.2
conda install -c omnia openmm # cuda92 por defecto Despues de haber instalado la dependencia correcta, y para evitar que cudatoolkit sea remplazado por nuevas versiones cuando actualices las librerías de tu entorno, sería recomendable que fijaras la versión del paquete. Supongamos que hemos elegido cudatoolkit 9.2: echo "cudatoolkit ==9.2" >> $CONDA_PREFIX/conda-meta/pinned Ya puedes actualizar los paquetes sin miedo a que se rompa la dependencia:
|
Compatibilidad entre variables de tipo int y numpy.dtype.int64Existen funciones de OpenMM cuya definición de tipo de variable de entrada está declarada y compilada con precisión sencilla. Es el caso por ejemplo de simtk.openmm.CustomExternalForce().addParticle(). Veamos un ejemplo: import simtk.openmm as mm
import simtk.unit as unit
import simtk.openmm.app as app
# Supongamos que definimos una fuerza externa sobre una lista de índices átomos:
list_atoms = np.array([0,1,2])
# La nueva fuerza externa será de tipo harmónico:
harmonic_potential = '0.5*K*((x-xo)^2+(y-yo)^2+(z-zo)^2)'
harmonic_restraint_force = mm.CustomExternalForce(harmonic_potential)
harmonic_restraint_force.addGlobalParameter('K', 500.0 * unit.kilocalories_per_mole/unit.angstrom**2)
harmonic_restraint_force.addPerParticleParameter('x0')
harmonic_restraint_force.addPerParticleParameter('y0')
harmonic_restraint_force.addPerParticleParameter('z0')
# Ahora definamos en un bucle las parámetros x0, y0 y z0 para cada átomo.
# Por simplicidad, aunque no tenga sentido, hagamos que dichos parámetros tomen el valor 0.
for index in list_atoms:
parameters = [0.0, 0.0, 0.0]
harmonic_restraint_force.addParticle(index, parameters) Este último bucle arroja el siguiente error:
Y esto se debe a que el método type(list_atoms_positions_restrained[0])
numpy.int64 Para solucionar el problema basta transformar el valor de la variable # Ahora definamos en un bucle las parámetros x0, y0 y z0 para cada átomo.
# Por simplicidad, aunque no tenga sentido, hagamos que dichos parámetros tomen el valor 0.
for index in list_atoms:
parameters = [0.0, 0.0, 0.0]
harmonic_restraint_force.addParticle(index, parameters) |
OpenMM no detecta la plataforma CUDA u OpenCL:En mi caso el problema se dió cuando instalé la versión más reciente de OpenMM, mediante el comando: conda install -c omnia -c conda-forge openmm (Que esta compilada con CUDA toolkit 10.1) Instalar este paquete con conda tampoco resuelve el problema: conda install cudatoolkit La solución al problema fue remover y reinstalar OpenMM con la versión CUDA de mi sistema (CUDA 9.1): conda install -c omnia/label/cuda91 -c conda-forge openmm Ahora el benchmark corre ccorrectamente: |
En mi caso el problema se dió cuaeneralizado lo resolverán pronto. La versión disponible en el canal conda-forge es nueva, antes no estaba. Sólo estaba omnia. Probaré yo a ver con el de omnia. |
Haz uso de este hilo para dudas técnicas y reporte de problemas relacionado con la instalación y uso de OpenMM.
The text was updated successfully, but these errors were encountered: