All streams
Search
Write a publication
Pull to refresh
4
0
Sergey Serebryakov @serebryakovsergey

Research Engineer

Send message
Также я всегда открыт для конструктивной критики и советов по коду, это важно, для этого и существует сообщество.

Прошу прощения, но все, что можно было сделать не правильно, было так и сделано (начиная от именования функций (Do_it?), и заканчивая архитектурой).

Очень не хватает в интернете подобных гайдов, чтобы самому посмотреть и разобраться как внутри все устроено.

К сожалению, данная статья только уводит в сторону.

Посмотрите простую реализацию micrograd — в первом приближении идея представлена OK.
Недавно тоже узнал про эту библиотеку, надо изучать ее возможности. В особенности, есть ли возможность использовать скользящее окно с ограничением на размер (количество точек) и длительности (максимально допустимая разница во времени между первым и последним значением) — полезно для временных рядом с пропущенными данными. Операция достаточно простая, но зачастую плохо интегрируемая с библиотеками, которые ожидают временной ряд, я не подготовленные данные (тензор какой-нибудь размерности).
Там еще много скриптов которые связывают разные шаги на баше. А так да — порог вхождения достаточно высокий мне кажется, особенно, если есть желание что-то поменять в самой библиотеке.
А где вы нашли про 70к часов?

Интересно, по ссылке написаны другие люди

Я знаю Питера и Виджея, это те персонажи в таблице, они возглавляют ту группу и рассказывали про текущий статус пару недель назад.

Про ваши вопросы — прошу простить за прямоту, но звучит так, как будто вы хотите получить бесплатную консультацию. Если вам интересно и у вас есть интересные данные, мы можем обучить модель на ваших данных под ключ, мои контакты есть в миллионе мест в интернете.

Упс, мне действительно просто интересно, извиняюсь что не так выразился. Я в прошлом работал над бенчмарками для DL приложений и мы в том числе запускали Kaldi в разных конфигурациях на фишере (2k часов). Когда все данные были в памяти, Kaldi работал пошустрее (понятно почему). Мы даже переписали nnet1 (да, давно было)) что-бы ускорить тренировку на CPU. В те времена Ден Повей говорил, что если ты не исследователь из Google, Baidu и т.п., то с Kaldi легче получить хорошие результаты. Ситуация, судя по всем, поменялась с тех пор.

Одна из рабочих групп MLPerf — Datasets работает над большим публичным набром данных для SST. Сейчас размер примерно 70 тысяч часов, цель — 100 тысяч. Референсная модель RNN transducer, которая (грубая оценка) должна обучиться на 100к часах за 10-30 дней на 64х RTX 2080 картах. У меня недостаточно опыта чтобы прокомментировать качество данных, но вот что используется:
  • Libri Speech & Common Voice ~ 2к часов
  • Некоторые (не помню, что точно значит) данные из интернета ~ 2к часов
  • Синтезированная речь (Текст модели GPT-2 начитан Voicery) ~ 1k часов
  • Аудиокниги (LibriVox) — 65k часов

У этой группы крутые советники — Kelly Davis, Mark Liberman, Andrew Ng и Dan Povey.

Пара вопросов:
1. С точки зрение текущего состояния предметной области и доступных фреймворков, как бы вы оценили Kaldi?
2. Если порассуждать на тему больших датасетов (> 100k часов) и подходов к построению state-of-the-art моделей (будь то классические DNN/HMM модели или end-to-end) и доступных фреймворков (например, Kaldi), CPU память имеет хоть какое-либо влияние на скорость/качество обучения или нет? Скажем, система с несколькими десятками террабайт RAM и 8-16 GPU которая вместит весь рабочий сет в /dev/shm. Или стандартный размер в 256GB-1TB которые доступны в большинстве серверных машин с 8 картами «just right»?
Одна из рабочих групп MLPerf — Best Practices — занимается похожим. Текущий упор на повторяемости (reproduciability) и переносимости (portability) с технической точки зрения.
Мне тоже интересно. И как отметили в комментариях к оригиналу
Проверка гипотез позволяет только проверить гипотезы, но не разработать их.

Вроде как результат проверки либо «Наблюдения не соответствуют гипотезе, отклоняем» либо «Недостаточно данных чтобы отклонить гипотезу».
Не используя BLAS для матричных умножений (для CPU выбор досточно обширен — OpenBLAS, BLIS, ATLAS, ACML, MKL, или что-то более высокоуровневое, типа Eigen), вы мгновенно теряете в производительности, причем достаточно много. Если мне не изменяет память, на процессорах семейства Haswell, 18 ядер, MNIST на плоских полносвязанных сетках тренируется за несколько десятков секунд до ~98% (с учетом того, что бейзлайн в 90% с логистической регрессией достигается за секунды).
А в целом, тот стиль архитектуры, который вы используете (в частности, выделение понятия нейрона в отдельный класс), был популярен лет 15 назад. Сейчас используют векторизированные представления/вычисления.
Если бы Вася Петров продал дом родителей в Кармеле за ~ 1.18 мл $, то тоже бы смог путешествовать некоторое время.
Если не ошибаюсь, то граф вычислений для архитектуры NAC не совсем соответствует формуле. Если взять граф за основу, то тогда:
Y = exp(W*log(|x| + e))

Свернём исходный тензор 1х1 свёрткой, подобно тому как мы делали в блоке Inception, получив тензор (M−2)∗(M−2)∗C2. Эта операция называется pointwise convolution

А разве при 1x1 свертке c шагом 1 по пространственным координатам меняются размерности? Вроде должно быть M∗M∗C2.
Согласен. Один из сценариев использования, который мне приходит в голову, это подбор параметров алгоритма оптимизации и архитеруры сети. Тут да, трафик между GPU отсутствует. Но все равно остается траффик CPU-GPU, который скорее всего удасться скрыть. Или специализированные алгортмы, например, реализованные в фреймфорке KALDI. Там тоже отсутствует траффик между GPU, и паралельно (итеративно) обучаются реплики сетей на достаточно больших батчах данных с последующей агрегацией весов.
Сомневаюсь. Надо вовремя данные подгружать для следующей итерации плюс при параллелизме по данным надо часто агрегировать градиенты. CPU-GPU и GPU-GPU коммуникация критически важна. Нейронные сетки надо на DGX-1 считать или чем то похожем с 8 GPU и NVLink'ом.
2

Information

Rating
Does not participate
Location
Palo Alto, California, США
Date of birth
Registered
Activity