Au moins avec Colab + Tesla P100, je pourrais utiliser Vulkan.
https://qiita.com/syoyo/items/3956e98e4a607cde6cb2
(Que diriez-vous de V100 ou A100?)
Essayez VkInline, qui peut appeler le noyau de calcul Vulkan en ligne depuis python, comme un cupy.
https://github.com/fynv/VkInline
Vous aurez besoin du pilote Vulkan 1.2. (Actuellement, seul le pilote RADV (pilote AMD OSS (?) Linux Vulkan) ou Windows Adrenalin est compatible avec la version 1.2?)
VkInline
La licence est une licence Anti 996 (Les entreprises qui ignorent les normes du travail, telles que 9h09 (21h00), 6 jours par semaine, ne doivent pas utiliser de logiciel sous licence anti-996)
https://github.com/996icu/996.ICU
Il n'y a pas de problème particulier, et si vous suivez la procédure, tout se passera bien.
VK_KHR_buffer_device_address
. Il ne fonctionne pas sous Windows sur amdgpu ou des GPU AMD plus anciens.Je peux y aller.
Cette fois, j'ai confirmé l'opération avec RX5700 (Navi) avec pilote RADV.
Remarque sur l'utilisation de Vulkan (noyau de calcul) avec RADV avec ROCm https://qiita.com/syoyo/items/ce3943757281acbdba49
Exécutons test_compute.py.
// from VkInline test_compute.py
import VkInline as vki
import numpy as np
# interface with numpy
harr = np.array([1.0, 2.0, 3.0, 4.0, 5.0], dtype='float32')
darr = vki.device_vector_from_numpy(harr)
print(darr.to_host())
# GLSL data type
print(darr.name_view_type())
harr2 = np.array([6,7,8,9,10], dtype='int32')
darr2 = vki.device_vector_from_numpy(harr2)
# kernel with auto parameters, launched twice with different types
kernel = vki.Computer(['arr_in', 'arr_out', 'k'],
'''
void main()
{
uint id = gl_GlobalInvocationID.x;
if (id >= get_size(arr_in)) return;
set_value(arr_out, id, get_value(arr_in, id)*k);
}
''')
darr_out = vki.SVVector('float', 5)
kernel.launch(1,128, [darr, darr_out, vki.SVFloat(10.0)])
print (darr_out.to_host())
darr_out = vki.SVVector('int', 5)
kernel.launch(1,128, [darr2, darr_out, vki.SVInt32(5)])
print (darr_out.to_host())
# create a vector from python list with GLSL type specified
darr3 = vki.device_vector_from_list([3.0, 5.0, 7.0, 9.0 , 11.0], 'float')
print(darr3.to_host())
[1. 2. 3. 4. 5.]
Comb_bb4c7639fd354507
[10. 20. 30. 40. 50.]
[30 35 40 45 50]
[ 3. 5. 7. 9. 11.]
:tada:
Je suis surpris que cela fonctionne correctement sans aucun problème! Vous pouvez vous y attendre, mais la création d'applications telles que l'apprentissage automatique à partir d'ici présente divers défis.
TODO