Zumindest mit Colab + Tesla P100 konnte ich Vulkan verwenden.
https://qiita.com/syoyo/items/3956e98e4a607cde6cb2
(Wie wäre es mit V100 oder A100?)
Probieren Sie VkInline aus, das den Vulkan-Rechenkern von Python aus wie einen Cupy inline aufrufen kann.
https://github.com/fynv/VkInline
Sie benötigen den Vulkan 1.2-Treiber. (Derzeit ist nur der RADV- (AMD OSS (?) Linux Vulkan-Treiber) oder Windows Adrenalin-Treiber mit 1.2? Kompatibel.)
VkInline
Die Lizenz ist eine Anti 996-Lizenz (Unternehmen, die Arbeitsnormen wie 9:09 (21:00) an 6 Tagen in der Woche ignorieren, sollten keine Anti-996-lizenzierte Software verwenden.)
https://github.com/996icu/996.ICU
Es gibt kein besonderes Problem, und wenn Sie das Verfahren befolgen, ist es reibungslos.
VK_KHR_buffer_device_address
unterstützt. Er funktioniert unter Windows auf amdgpu oder älteren AMD-GPUs nicht.Ich kann gehen.
Dieses Mal habe ich den Betrieb mit RX5700 (Navi) mit RADV-Treiber bestätigt.
Beachten Sie die Verwendung von Vulkan (Rechenkern) mit RADV mit ROCm https://qiita.com/syoyo/items/ce3943757281acbdba49
Lassen Sie uns test_compute.py ausführen.
// 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:
Ich bin überrascht, dass es ohne Probleme reibungslos funktioniert! Sie können es erwarten, aber es gibt verschiedene Herausforderungen bei der Erstellung von Apps wie maschinellem Lernen von hier aus.
TODO
Recommended Posts