Pull to refresh
14
0
Send message

Аппаратное ускорение глубоких нейросетей: GPU, FPGA, ASIC, TPU, VPU, IPU, DPU, NPU, RPU, NNP и другие буквы

Reading time 28 min
Views 83K


14 мая, когда Трамп готовился спустить всех собак на Huawei, я мирно сидел в Шеньжене на Huawei STW 2019 — большой конференции на 1000 участников — в программе которой были доклады Филипа Вонга, вице-президента по исследованиям TSMC по перспективам не-фон-неймановских вычислительных архитектур, и Хенга Ляо, Huawei Fellow, Chief Scientist Huawei 2012 Lab, на тему разработки новой архитектуры тензорных процессоров и нейропроцессоров. TSMC, если знаете, делает нейроускорители для Apple и Huawei по технологии 7 nm (которой мало кто владеет), а Huawei по нейропроцессорам готова составить серьезную конкуренцию Google и NVIDIA.

Google в Китае забанен, поставить VPN на планшет я не удосужился, поэтому патриотично пользовался Яндексом для того, чтобы смотреть, какая ситуация у других производителей аналогичного железа, и что вообще происходит. В общем-то за ситуацией я следил, но только после этих докладов осознал, насколько масштабна готовящаяся в недрах компаний и тиши научных кабинетов революция.

Только в прошлом году в тему было вложено больше 3 миллиардов долларов. Google уже давно объявил нейросети стратегическим направлением, активно строит их аппаратную и программную поддержку. NVIDIA, почувствовав, что трон зашатался, вкладывает фантастические усилия в библиотеки ускорения нейросетей и новое железо. Intel в 2016 году потратил 0,8 миллиарда на покупку двух компаний, занимающихся аппаратным ускорением нейросетей. И это при том, что основные покупки еще не начались, а количество игроков перевалило за полсотни и быстро растет.


TPU, VPU, IPU, DPU, NPU, RPU, NNP — что все это означает и кто победит? Попробуем разобраться. Кому интересно — велкам под кат!
Читать дальше →
Total votes 168: ↑168 and ↓0 +168
Comments 116

Дешифрация TLS трафика Java приложений с помощью логов

Reading time 8 min
Views 20K


Отладка защищенных по SSL/TLS интеграций у Java приложений порой становится весьма нетривиальной задачей: соединение не ставится/рвется, а прикладные логи могут оказаться скудными, доступа к правке исходных кодов может не быть, перехват трафика Wireshark'ом и попытка дешифрации приватным ключом сервера (даже если он есть) может провалиться, если в канале применялся шифр с PFS; прокси-сервер вроде Fiddler или Burp может не подойти, так как приложение не умеет ходить через прокси или на отрез отказывается верить подсунутому ему сертификату…

Недавно на Хабре появилась публикация от ValdikSS о том, как можно с помощью Wireshark расшифровать любой трафик от браузеров Firefox и Chrome без обладания приватным ключом сервера, без подмены сертификатов и без прокси. Она натолкнула автора нынешней статьи на мысль — можно ли применить такой подход к Java приложениям, использовав вместо файла сессионных ключей отладочные записи JVM? Оказалось — можно, и сегодня, уважаемые однохабряне, я расскажу, как это сделать.
Читать дальше →
Total votes 25: ↑23 and ↓2 +21
Comments 2

Простой, но эффективный прием для работы с блоками комментариев SQL

Reading time 6 min
Views 16K
Разработчикам систем, использующих базы данных, приходится много писать на языке SQL. Все знают, но не все это осознают, что SQL переживает уже четвертый десяток лет как одна из самых успешных и широко распространенных технологий в мире компьютеров. Технологии не стоят на месте, но даже сегодня, многие создатели пост-реляционных систем баз данных специально вкладывают средства и ресурсы для предоставления пользователям SQL-подобных средств поиска и манипуляции данных. Давайте рассмотрим, как современные требования к продуктам для разработки БД облегчают и ускоряют создание корректного кода на SQL и познакомимся с любопытным маленьким трюком.

Недавно наткнулся на простое и эффективное решение одной элементарной даже не проблемы, а неудобства и решил поделиться. Суть вот в чем:

Как и любой практикующий разработчик SQL или администратор БД, я сохраняю скрипты для решения повторяющихся задач, чтобы в будущем уже иметь подготовленный инструмент для быстрого выполнения. С помощью DBArtisan можно автоматически записывать все операторы SQL, которые я выполнял в течение сессии и потом использовать некоторые из них для создания и сохранения таких скриптов.  В среде DBArtisan я могу поместить в главное меню пункты для вызова наиболее часто используемых скриптов или одновременно выполнить скрипт на нескольких серверах.

Естественно, многие из таких повторяющихся задач требуют различных специализированных «кусков кода», в зависимости от решаемой задачи  или БД. Оказалось, что часто быстрее и проще в поддержке не создавать множество однотипных, «почти» совпадающих скриптов SQL или версий, а применять «блочные комментарии» для временного выключения/включения нужного фрагмента SQL и вручную управлять ими в ISQL редакторе.
Читать дальше →
Total votes 7: ↑6 and ↓1 +5
Comments 6

Некоторые советы при работе с PLSQL

Reading time 6 min
Views 64K
Я решил написать цикл небольших заметок благодаря посту Хорошие привычки в PL/SQL, советы которого и рассмотрю.

В этой части обсудим:
  1. Нюансы %TYPE/%ROWTYPE
  2. Select for update
  3. Работа с коллекциями

Читать дальше →
Total votes 23: ↑19 and ↓4 +15
Comments 13

Бизнес-аналитика: «Как правильно написать список требований к системе?», Алистер Коберн, обзор часть 1

Reading time 4 min
Views 8.1K
Книга на мой взгляд очень интересная, по секрету поделюсь, что я прочитала ее не с начала, скорее — с конца — в начало, поскольку все самое интересное, включая словарь и сферы применения в рамках сбора требований, все это написано как раз в конце книги. Даны четкие рекомендации как составить список требований и описать систему с разной степенью детализации, начиная от общей концепции, как должно работать приложение, до постраничного составления сценариев.
Для чего она нужна — чтобы лучше понимать, что все-таки делают исполненные очей бизнес-аналитики, когда приходит запрос — хочу сайт, как там по ссылке.
Читать дальше →
Total votes 17: ↑14 and ↓3 +11
Comments 21

Shell-script для конвертации базы MySql в Sqlite

Reading time 1 min
Views 1.4K
Возникла задача конвертации базы MySql в базу sqlite. В разделе Converter Tools wiki sqlite'a есть shell script для быстрой конвертации, но попробовав использовать его, я получил много ошибок. Поэтому пришлось его немного подправить.
может кому пригодится
Total votes 6: ↑6 and ↓0 +6
Comments 1

Профилирование нагрузки на файловую систему с помощью iostat и gnuplot — заметки дилетанта

Reading time 9 min
Views 90K
Зачастую работа «в поле» требует сбора и анализа информации на сайте заказчика в условиях наличия крайне скудного списка утилит. В частности собрать информацию об использовании системы ввода-вывода в течении дня.

В статье я попробую показать, как располагая только iostat и gnuplot можно попробовать провести анализ системы и какие выводы можно сделать.

Я не претендую на доскональное владение предметом и точное использование терминов. Более того, я постараюсь говорить «обычным» языком и не бросаться терминами.

Все описанное ниже есть плод опыта, ошибок, гугления, курения манов и прочая
Читать дальше →
Total votes 47: ↑43 and ↓4 +39
Comments 10

Профилирование уже запущенных программ

Reading time 6 min
Views 35K
Все мы пользуемся профайлерами. Традиционная схема работы с ними такова, что приходится изначально запускать программу «под профайлером» а затем, после окончания ее работы, анализировать сырой дамп с помощью дополнительных утилит.
А что делать если мы не имея root'а хотим запрофилировать уже работающую программу, которая долго работала «как надо», а сейчас что-то пошло не так. И хотим это сделать быстро. Знакомая ситуация?
Тогда рассмотрим наиболее популярные профайлеры и принципы их работы. А затем профайлер, который решает именно указанную задачу.

Читать дальше →
Total votes 41: ↑38 and ↓3 +35
Comments 7

Так как же удалить миллионы файлов из одной папки?

Reading time 5 min
Views 146K

Феерическая расстановка точек над i в вопросе удаления файлов из переполненной директории.

Прочитал статью Необычное переполнение жесткого диска или как удалить миллионы файлов из одной папки и очень удивился. Неужели в стандартном инструментарии Linux нет простых средств для работы с переполненными директориями и необходимо прибегать к столь низкоуровневым способам, как вызов getdents() напрямую.

Для тех, кто не в курсе проблемы, краткое описание: если вы случайно создали в одной директории огромное количество файлов без иерархии — т.е. от 5 млн файлов, лежащих в одной единственной плоской директории, то быстро удалить их не получится. Кроме того, не все утилиты в linux могут это сделать в принципе — либо будут сильно нагружать процессор/HDD, либо займут очень много памяти.

Так что я выделил время, организовал тестовый полигон и попробовал различные средства, как предложенные в комментариях, так и найденные в различных статьях и свои собственные.
Читать дальше →
Total votes 155: ↑145 and ↓10 +135
Comments 103

Создание «островка сетевой свободы» на основе VPS за 30 минут

Reading time 4 min
Views 155K
В связи с вступлением в силу нашумевшего закона 149-ФЗ у многих хабравчан возник вопрос: а что будет дальше? Неужели в России появится аналог Великого Китайского Фаервола, который будет блокировать всё и вся? В данном туториале я хотел бы рассмотреть один из самых эффективных и безопасных способов обеспечения себе свободы информации — собственный VPS сервер, находящийся далеко за границей и связанного с вами с помощью зашифрованного VPN туннеля. В отличие от tor или i2p конфиденциальность передаваемой информации гарантированна, вряд ли кто-то будет пытаться расшифровать ваши данные или устраивать рейд на заграничный сервер (если конечно вы не хакер мирового масштаба).
Читать дальше →
Total votes 161: ↑124 and ↓37 +87
Comments 94

Простая поддержка окружений в Spring 3.1+

Reading time 2 min
Views 17K
Многие знают что для подстановки значений в конфигурационные файлы Spring можно использовать context:property-placeholder.

<context:property-placeholder location="classpath*:/prop/*.properties"/> <!-- здесь будут искаться property файлы -->

<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg ref="mongo"/>
    <constructor-arg name="databaseName" value="${mongo.db}"/> <!-- здесь будет подставлено значение из найденных property -->
</bean>

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

Когда передо мной встала задача, в зависимости от окружения (dev, prod, load-test), изменить логику развертывания — я искренне попытался использовать старый проверенный способ через property.
И я сделал следующее:
Total votes 14: ↑14 and ↓0 +14
Comments 6

Какой Java поток нагружает мой процессор

Reading time 3 min
Views 27K
Что Вы делаете, когда Ваше Java приложение потребляет 100% ЦП? Оказывается Вы легко можете найти проблемные потоки, используя встроенные Unix и JDK утилиты. Никакие инструменты профилирования не потребуются.
С целью тестирования мы будем использовать простую программу:
Читать дальше →
Total votes 34: ↑30 and ↓4 +26
Comments 13

Реальная оценка или почему наступают дедлайны?

Reading time 3 min
Views 63K
image

Как опытный менеджер проектов, я часто сталкивался с заявленными программистами сроками выполнения задачи, умножал их на Пи и брал следующий по счету порядок. Так 1 день превращался в 3.14 недель. Я познал на собственной шкуре, что программисты — никудышные оценщики.

Для пущей точности я сделал таблицу, которая помогает перевести программистские оценки в приближенные к реальности.
Читать дальше →
Total votes 138: ↑127 and ↓11 +116
Comments 108

Диалект Oracle SQL: Model в примерах. Часть 2

Reading time 5 min
Views 19K
imageЭто продолжение статьи о использовании расширения оператора SELECT — конструкции Model. Из первой части вы уже имеете представление о предназначении и некоторых особенностях её применения, а также знакомы с половиной синтаксиса. Далее будет разобрано несколько сложных примеров, а также дан анализ области применения и производительности.
Читать дальше →
Total votes 19: ↑17 and ↓2 +15
Comments 22

Диалект Oracle SQL: Model в примерах. Часть 1

Reading time 10 min
Views 50K
imageЛюбой разработчик, имеющий дело с генерацией отчётности из баз данных, регулярно сталкивается с построением громоздких запросов. Часто это бывает связано с ошибками проектирования БД, и, ещё чаще, со сложностями преобразования извлекаемых данных. К последним можно отнести применение итерационных методов вычисления, подсчёт промежуточных итогов по подгруппам, расчёты, в которых используются значения соседних строк выборки, сложное форматирование строк и подобные задачи. Такие преобразования часто выносятся с уровня БД на уровень сервера приложений или клиента, что сказывается на производительности и удобстве сопровождения кода. Для решения этих задач SQL СУБД Oracle предоставляет аналитические функции и оператор MODEL — о нём и пойдёт речь в этой статье.

Читать дальше →
Total votes 23: ↑20 and ↓3 +17
Comments 6

Oracle RAC. Общее описание / Часть 1

Reading time 10 min
Views 71K
Высоконагруженные сайты, доступность «5 nines». На заднем фоне (backend) куча обрабатываемой информации в базе данных. А что, если железо забарахлит, если вылетит какая-то давно не проявлявшаяся ошибка в ОС, упадет сетевой интерфейс? Что будет с доступностью информации? Из чистого любопытства я решил рассмотреть, какие решения вышеперечисленным проблемам предлагает Oracle. Последние версии, в отличие от Oracle 9i, называются Oracle 10g (или 11g), где g – означает «grid», распределенные вычисления. В основе распределенных вычислений «как ни крути» лежат кластера, и дополнительные технологии репликации данных (DataGuard, Streams). В этой статье в общих чертах описано, как устроен кластер на базе Oracle 10g. Называется он Real Application Cluster (RAC).

Статья не претендует на полноту и всеобъемлемость, также в ней исключены настройки (дабы не увеличивать в объеме). Смысл – просто дать представление о технологии RAC.

P.S. Beware of the многабукаф
Продолжение статьи

Читать дальше →
Total votes 55: ↑49 and ↓6 +43
Comments 10

GC и большой heap: друзья или враги?

Reading time 15 min
Views 28K
Споры о том, что лучше: ручное управление или автоматическое ведутся во многих областях науки и техники. Положиться на человека или отдаться на откуп бесстрастным механизмам и алгоритмам? Похоже, что в мире создания Enterprise решений чаша весов склонилась все-таки в сторону автоматического управления памятью, большей частью из-за того, что возиться с указателями, ручным управлением памятью и закрашивать седину после каждого бага, появившегося из-за «неправильного» компилятора С/C++ не хочется сейчас уже никому. Но до сих пор возникают на форумах топики, где не сдающиеся суровые приверженцы ручного управления памятью яростно и непримиримо отстаивают свои ретроградные взгляды в борьбе с прогрессивной частью человечества. Пусть их, оставим их в покое.

Одной из наиболее часто использующихся платформ с механизмами автоматического управления памятью стала Java. Но, автоматическое управление памятью принесло не только комфорт в нелегкий труд программистов, но и свои недостатки, с которыми приходиться сталкиваться всё чаще и чаще. Современные многопользовательские приложения, способные обработать огромный поток транзакций, требуют значительных аппаратных ресурсов, размеры которых раньше было трудно даже вообразить. Однако, дело не в размерах этих ресурсов, дело в том, что сборщик мусора, существующий в большинстве современных JVM, не может работать эффективно с большими объемами памяти.
Читать дальше →
Total votes 50: ↑48 and ↓2 +46
Comments 28

Do It Yourself Java Profiling

Reading time 17 min
Views 58K
На прошедшей конференции Appication Developer Days, Роман Елизаров (elizarov) рассказал, как профилировать, т.е. исследовать производительность любых Java-приложений, без использования специализированных инструментов, будь они хоть вендорские, хоть open-source.Оказывается, можно использовать малоизвестные, встроенные в JVM возможности (threaddumps, java agents, bytecode manipulation), и быстро и эффективно реализовать профилирование, которое можно запускать постоянно даже на боевой системе.Вот видео доклада (тут оно косолапо эмбедится, но оно 1280x720, все отлично читаемо):

Но я предлагаю также, взглянуть на 70K текста иллюстрированной статьи-стенограммы под катом, составленной мной по видео и слайдам.
Статья-стенограмма. Многобукв.
Total votes 52: ↑49 and ↓3 +46
Comments 32
1

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity