Color
@Color
Golang SWE, Cloud & DevOps

Ошибка при запуске PyOpenCL — что делать?

Установил на убунту OpenCL, PyOpenCL, AMD APP SDK, все зависимости - по идее, должно работать.

Запускаю тестовый примерчик отсюда:
import numpy as np
import pyopencl as cl

a_np = np.random.rand(50000).astype(np.float32)
b_np = np.random.rand(50000).astype(np.float32)

ctx = cl.create_some_context()
queue = cl.CommandQueue(ctx)

mf = cl.mem_flags
a_g = cl.Buffer(ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=a_np)
b_g = cl.Buffer(ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=b_np)

prg = cl.Program(ctx, """
__kernel void sum(__global const float *a_g, __global const float *b_g, __global float *res_g) {
  int gid = get_global_id(0);
  res_g[gid] = a_g[gid] + b_g[gid];
}
""").build()

res_g = cl.Buffer(ctx, mf.WRITE_ONLY, a_np.nbytes)
prg.sum(queue, a_np.shape, None, a_g, b_g, res_g)

res_np = np.empty_like(a_np)
cl.enqueue_copy(queue, res_np, res_g)

# Check on CPU with Numpy:
print(res_np - (a_np + b_np))
print(np.linalg.norm(res_np - (a_np + b_np)))


Получаю ошибку:
Traceback (most recent call last):
  File "test.py", line 10, in <module>
    ctx = cl.create_some_context()
  File "/usr/lib/python2.7/dist-packages/pyopencl/__init__.py", line 767, in create_some_context
    platforms = get_platforms()
pyopencl.LogicError: clGetPlatformIDs failed: platform not found khr


По всем запросам, гугл говорит, что это баг nvidia, и как его можно исправить.
Но у меня то AMD!

Совершенно не знаю, с какого конца подойти к вопросу. Прошу помощи. В чем может быть проблема на AMD?

--- Вопрос решен. Ниже приведены приблизительные шаги, после которых все заработало. ---
Спасибо Влад Гвер за помощь!

Инструкцию брал здесь. Но пакеты ставил немного иначе:
  1. Скачал AMD-APP-SDK отсюда. Брал версию 2.9.1, так как 3.0 на этот момент в бэте, и у меня с ней не вышло. Установил
  2. Сделал sudo apt-get -f install, чтобы удовлетворить потерянные зависимости
  3. Сделал
    sudo apt-get install linux-headers-generic fglrx fglrx-amdcccle
    , чтобы установить драйвер AMD из репки, так как драйвер с сайта у меня не встал, по всей видимости из-за разногласий с версией fglrx
  4. Сделал sudo apt-get install python-pyopencl
  5. Ребут
  6. Тестовый пример со странички PyOpenCL работает
  • Вопрос задан
  • 3590 просмотров
Решения вопроса 1
Проблема может быть в том, что OpenCL у вас не зацепился, например. Видеокарта-то поддерживает его?

Самый просто способ проверить — установить darktable (из репозиториев должен подтягиваться без проблем) и выполнить «sudo darktable -d opencl». Если ошибок не выдаст, значит проблема все же где-то в Python. Там же будет и информация обо всех устройствах, поддерживающих OpenCL. Если будет ругаться на что-нибудь, вероятно, не зацепился OpenCL.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы