Вычисляйте Tanimoto / Jaccard с эффективным использованием памяти на GPU, Tensorflow. Недостаточно памяти - PullRequest
0 голосов
/ 08 июля 2020

Мне нужно вычислить большое количество оценок Танимото между логическими матрицами (во время обучения модели, для увеличения данных).

Т.е. для каждого пакета из 128 записей с 4000 бит (« запрос »), мне нужно вычислить Танимото против библиотеки из 10000 записей с 4000 бит. Для ясности, под «Танимото» я подразумеваю c11 / (c11 + c10 + c01), где c11 - количество битов, установленных в запросе и библиотеке, c10 - количество бит только в запросе, c00 - количество битов. только в библиотеке.

Чтобы усложнить ситуацию, учитывается динамически изменяющееся подмножество из 4000 бит, поэтому I не может ничего предварительно вычислить .

Это приводит к 128 * 10000 матрица с плавающей запятой, и это нормально. Проблема возникает из-за промежуточных матриц 128 * 10000 * 4000, которые я строю для вычисления c11, c10, c01. Это 4 ГБ за штуку, и GPU go из памяти (даже до фактической загрузки моей модели). Также расчет медленный . См. Colab, чтобы узнать, как я это делаю сейчас.

Примечание: истинные матрицы намного более разрежены, чем фиктивные, которые я создаю здесь, они будут примерно 2% -15% True и rest False.

Я использовал операции float32; использование uint8 сокращает использование памяти как минимум в 4 раза. Поскольку я видел, что использование int влияет на производительность графического процессора, это проблема?

https://colab.research.google.com/drive/1ufkpmnB7O4U465rufG113N53Stt1W4yv?usp=sharing

Решения / предложения?

  • Я могу более или менее представить, как это можно было бы написать на чистом CUDA, выполняя суммирование на лету, избегая больших матриц , но есть ли способ в Tensorflow?
  • Если бы я мог упаковать логические матрицы в битовые блоки и использовать битовые операции , это уменьшило бы использование памяти еще в 8 раз. Как бы я это сделал? Будет ли это работать с точки зрения производительности?
  • " Что-то что-то разреженное что-то что-то ?", Но у меня нет опыта работы с этим в TF - указатели?
...