Оригінальне запитання в цьому дописі було: як змусити Keras і Tensorflow працювати з графічним процесором AMD.
Відповідь на це запитання така:
1.) Keras буде працювати, якщо ви зможете змусити Tensorflow працювати належним чином (необов’язково у вашому віртуальному / кондо-середовищі).
2.) Щоб змусити Tensorflow працювати на графічному процесорі AMD, як заявляли інші, один із способів, що це може працювати, - це компіляція Tensorflow для використання OpenCl. Для цього прочитайте посилання нижче. Але для стислості я підсумую необхідні кроки тут:
Вам знадобляться власні драйвери AMD. Наразі вони доступні лише в Ubuntu 14.04 (версія до того, як Ubuntu вирішила змінити спосіб відображення інтерфейсу). Підтримка Ubuntu 16.04 при написанні цього повідомлення обмежена кількома графічними процесорами через AMDProDrivers. Читачі, які хочуть глибоко навчитися на графічних процесорах AMD, повинні це знати!
Компіляція Tensorflow з підтримкою OpenCl також вимагає отримання та встановлення таких передумов: заголовки OpenCl, ComputeCpp.
Після виконання передумов налаштуйте свою збірку. Зверніть увагу, що існує 3 варіанти компіляції Tensorflow: Std Tensorflow (стабільний), Benoits Steiner's Tensorflow-opencl (розвиваючий) та Tensorflow-opencl Люка Іванського (дуже експериментальний), який ви можете отримати з github. Також зверніть увагу, що якщо ви вирішите побудувати з будь-якої з версій opencl, питання щодо використання opencl буде відсутнє, оскільки передбачається, що ви використовуєте його. І навпаки, це означає, що якщо ви налаштовуєте за стандартним тензорним потоком, вам потрібно буде вибрати "Так", коли сценарій налаштування попросить вас використовувати opencl та "НІ" для CUDA.
Потім запустіть тести так:
$ bazel test --config = sycl -k --test_timeout 1600 - // tensorflow / ... - // tensorflow / contrib / ... - // tensorflow / java / ... - // tensorflow / compiler / ...
Оновлення: Це робиться на моїй установці триває надто довго під час моєї установки. Частина, яка займає багато часу, це всі запущені тести. Я не впевнений, що це означає, але у багатьох моїх тестів очікується 1600 секунд. Ймовірно, тривалість може бути скорочена за рахунок збільшення часу очікування. Крім того, ви можете просто побудувати тензорний потік без тестів. На момент написання цієї статті проведення тестів тривало вже 2 дні.
Або просто побудуйте пакет pip так:
bazel build --local_resources 2048,.5,1.0 -c opt --config=sycl //tensorflow/tools/pip_package:build_pip_package
Будь ласка, насправді прочитайте допис у блозі на Codeplay: Лукас Іванський опублікував вичерпний підручник про те, як змусити Tensorflow працювати з OpenCl, лише 30 березня 2017 року. Отже, це зовсім недавня публікація. Є також деякі деталі, про які я тут не писав.
Як зазначено у багатьох публікаціях вище, невеликі шматочки інформації поширюються по всій мережі. Пост Лукаса з точки зору вартості додає, що вся інформація була зібрана в одному місці, що мало б зробити налаштування Tensforflow та OpenCl трохи менш страшним. Я надаю лише посилання тут:
https://www.codeplay.com/portal/03-30-17-setting-up-tensorflow-with-opencl-using-sycl
Тут було опубліковано трохи повнішу інструкцію:
http://deep-beta.co.uk/setting-up-tensorflow-with-opencl-using-sycl/
Він відрізняється головним чином явним повідомленням користувачеві, що йому / їй потрібно:
- створити символічні посилання на підпапку
- а потім фактично встановити tensorflow за допомогою команди "python setup.py razvijaти".
Зверніть увагу, що вище згаданий альтернативний підхід з використанням tensorflow-cl:
https://github.com/hughperkins/tensorflow-cl
На даний момент я не можу зрозуміти, який підхід є кращим, хоча, схоже, такий підхід є менш активним. Розміщується менше проблем, і відбувається менше розмов для їх вирішення. Торік відбувся великий поштовх. Додаткові натискання зменшились з листопада 2016 року, хоча Х'ю, здається, висував деякі оновлення кілька днів тому на момент написання цього допису. (Оновлення: якщо ви прочитали деяку частину документації readme, ця версія tensorflowo тепер покладається лише на підтримку спільноти, оскільки основний розробник зайнятий життям.)
ОНОВЛЕННЯ (2017-04-25): У мене є кілька приміток, заснованих на тестуванні tensorflow-opencl нижче.
- Майбутній користувач цього пакету повинен зауважити, що використання opencl означає, що вся важка робота з точки зору обчислень перекладається на графічний процесор. Я згадую це, тому що особисто думав, що обчислювальне робоче навантаження буде розподілено між моїм центральним процесором та iGPU. Це означає, що потужність вашого графічного процесора дуже важлива (зокрема, пропускна здатність та доступна VRAM).
Нижче наведено деякі цифри для обчислення 1 епохи за допомогою набору даних CIFAR10 для МОЄГО НАСТРОЮВАННЯ (A10-7850 з iGPU). Ваш пробіг майже напевно буде змінюватися!
- Tensorflow (за допомогою встановлення піп): ~ 1700 с / епоха
- Тенсорний потік (із SSE + AVX): ~ 1100 с / епоха
- Tensorflow (з / opencl і iGPU): ~ 5800 с / епоха
Ви бачите, що в цьому конкретному випадку продуктивність гірша. Я пояснюю це наступними факторами:
- IGPU має лише 1 Гб. Це призводить до великої кількості копіювання вперед і назад між процесором і графічним процесором. (Opencl 1.2 ще не має можливості передавати дані через покажчики; натомість дані потрібно копіювати вперед і назад).
- IGPU має лише 512 потокових процесорів (і 32 Гбіт / с пропускну здатність пам’яті), що в цьому випадку повільніше, ніж 4 процесори з використанням наборів команд SSE4 + AVX.
- Розробка tensorflow-opencl знаходиться на початковій стадії, і багато оптимізацій в SYCL тощо ще не зроблено.
Якщо ви використовуєте графічний процесор AMD з більшою кількістю VRAM і більше потокових процесорів, ви напевно отримаєте набагато кращі показники продуктивності. Мені було б цікаво прочитати, яких цифр люди досягають, щоб знати, що можливо.
Я продовжуватиму підтримувати цю відповідь, якщо / коли оновлення надсилатимуться.
3.) В даний час натякається на альтернативний спосіб, який полягає у використанні ініціативи AMD RocM та бібліотеки miOpen (еквівалент cuDNN). Це / будуть бібліотеки з відкритим кодом, що дозволяють глибоке навчання. Застереження полягає в тому, що підтримка RocM наразі існує лише для Linux, і що miOpen ще не випущений в дику природу, але Раджа (керівник графічного процесора AMD) заявив в AMA, що, використовуючи вищезазначене, слід мати можливість глибокого навчання на Графічні процесори AMD. Насправді підтримка запланована не лише для Tensorflow, а й для Cafe2, Cafe, Torch7 та MxNet.