<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Блог Артёма Агасиева: заметки с тегом CUDA</title>
<link>https://agasiev.com/tags/cuda/</link>
<description>Telegram: @aagasiev</description>
<author>Артём Агасиев</author>
<language>ru</language>
<generator>E2 (v3576; Aegea)</generator>

<itunes:owner>
<itunes:name>Артём Агасиев</itunes:name>
<itunes:email></itunes:email>
</itunes:owner>
<itunes:subtitle>Telegram: @aagasiev</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Ошибка при работе с библиотекой implicit на GPU</title>
<guid isPermaLink="false">80</guid>
<link>https://agasiev.com/all/oshibka-pri-rabote-s-bibliotekoy-implicit-na-gpu/</link>
<pubDate>Mon, 03 May 2021 01:50:50 +0300</pubDate>
<author>Артём Агасиев</author>
<comments>https://agasiev.com/all/oshibka-pri-rabote-s-bibliotekoy-implicit-na-gpu/</comments>
<description>
&lt;p&gt;Работаю тут с библиотекой implicit для питона, настроил всю инфраструктуру CUDA, прописал все пути, но все равно ловил странное исключение, при попытке использования ALS на GPU:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;No CUDA extension has been built, can't train on GPU&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Чтож, идем читать исходники &lt;a href="https://github.com/benfred/implicit/blob/master/implicit/gpu/als.py"&gt;als.py&lt;/a&gt;:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="python"&gt;
if not implicit.gpu.HAS_CUDA:
    raise ValueError("No CUDA extension has been built, can't train on GPU.")
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Очевидно, HAS_CUDA == False, но с чего это вдруг? Находим инициализацию этой переменной в &lt;a href="https://github.com/benfred/implicit/blob/master/implicit/gpu/__init__.py"&gt;__init__.py&lt;/a&gt;:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="python"&gt;
try:
    import cupy  # noqa

    from ._cuda import *  # noqa

    HAS_CUDA = True
except ImportError:
    HAS_CUDA = False
&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Файл _cuda — локальный, значит остается только проверить наличие &lt;a href="https://docs.cupy.dev"&gt;cupy&lt;/a&gt; на рабочей машине. И правда, все дело было именно в её отсутствии. Ну хоть сообщить то об этом нормально можно было? :(&lt;/p&gt;
&lt;p&gt;Устанавливаем по  &lt;a href="https://docs.cupy.dev/en/stable/install.html"&gt;инструкции&lt;/a&gt;, запускаем fit на ALS и вуаля, все работает. На RTX 3090 прирост скорости обучения, по сравнению с Xeon W-2265, у меня был примерно в 20 раз, на разреженной матрице размерности 300000х100000.&lt;/p&gt;
</description>
</item>

<item>
<title>Unknown option «-​-enable-cuda-sdk».</title>
<guid isPermaLink="false">76</guid>
<link>https://agasiev.com/all/unknown-option-enable-cuda-sdk/</link>
<pubDate>Mon, 14 Dec 2020 14:23:45 +0300</pubDate>
<author>Артём Агасиев</author>
<comments>https://agasiev.com/all/unknown-option-enable-cuda-sdk/</comments>
<description>
&lt;p&gt;Забавная опечатка в &lt;a href="https://docs.nvidia.com/video-technologies/video-codec-sdk/ffmpeg-with-nvidia-gpu/"&gt;официальной инструкции Nvidia&lt;/a&gt; по сборке ffmpeg для работы с CUDA.&lt;/p&gt;
&lt;p&gt;Пишут, что для конфигурации надо сделать:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="shell"&gt;./configure --enable-nonfree -–enable-cuda-sdk –enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Если это нагло скопипастить и выполнить, то получим такую вот ошибку:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="shell"&gt;Unknown option "-–enable-cuda-sdk".&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Молодцы они эдакие, в своем копипастном примере взяли и поменяли знак минуса на дефис. Я почти уверен, что текст верстали под macOS, она любит такие автозамены проворачивать.&lt;/p&gt;
&lt;p&gt;Надо вот так:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="shell"&gt;./configure --enable-nonfree --enable-cuda-sdk --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;А если получим варнинг:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="shell"&gt;WARNING: Option --enable-cuda-sdk is deprecated. Use --enable-cuda-nvcc instead.&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;То вообще вот так:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="shell"&gt;./configure --enable-nonfree --enable-cuda-nvcc --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;Ну все, теперь можно компилить и пользоваться.&lt;/p&gt;
&lt;p&gt;P.S. Забавно, движок блога Эгея тоже сливает два минуса в дефис, если они находятся вне тэга «код», поэтому в заголовке я их разделил &lt;a href="https://unicode-table.com/en/200B/"&gt;пробелом нулевой длины&lt;/a&gt;.&lt;/p&gt;
</description>
</item>


</channel>
</rss>