В этом посте приведены пошаговые инструкции по обучению модели Wavenet с помощью TensorFlow на AWS. Он заимствован как из Учебника Karpathy по AWS (для настройки AWS), так и из этого поста на Medium (для настройки TensorBoard и Jupyter). Он использует репозиторий tensorflow-wavenet с Github. См. Исходный пост Deepmind для получения дополнительной информации о Wavenet.

Настройка AWS

Я предполагаю, что у вас есть некоторый опыт работы с AWS, но я постараюсь дать ссылку на соответствующие ресурсы, чтобы узнать, как использовать AWS.

Если вы хотите сохранить свои обученные модели, вы должны сначала настроить S3 bucket для загрузки файлов. Откройте панель управления EC2 консоли AWS и нажмите запустить экземпляр (если вы не знаете, как это сделать, см. Учебник Karpathy).

Мы будем использовать AMI AWS Deep Learning, поэтому щелкните вкладку AWS Marketplace, выполните поиск AMI Deep Learning и выберите лучший результат.

Затем выберите экземпляр с графическим процессором. Например, файл p2.xlarge.

Обратите внимание, что p2.xlarge стоит ~ 0,9 доллара в час. Здесь расценки Amazon на EC2. Для целей этого руководства вы можете использовать экземпляр по требованию (по умолчанию). Если вы в конечном итоге часто используете AWS для задач машинного обучения, рекомендуется использовать спотовые экземпляры с частым резервным копированием моделей на S3, чтобы сэкономить много денег (спотовый экземпляр p2.xlarge стоит ~ 0,16 доллара в час). . В любом случае нажмите Далее: настройка сведений об экземпляре.

Если вы хотите предоставить машине доступ к вашей корзине S3, добавьте свою роль IAM (если у вас нет роли IAM, «щелкните создать новую роль IAM»). Затем нажмите «Далее: Добавить хранилище».

Диск по умолчанию имеет 30 ГБ памяти. Это должно подойти для обучения базовой сети Wavenet на небольшом количестве аудиоданных, но если вы хотите тренироваться на более крупном наборе данных, выберите больший объем EBS. Затем нажмите «Далее: Добавить теги», а затем нажмите «Далее: Настроить группу безопасности».

Найдите в Google мой IP-адрес, чтобы получить свой IP-адрес, затем в правиле SSH замените 0.0.0.0/0 своим IP-адресом (чтобы у всего мира не было доступа SSH к вашему компьютеру). Также добавьте настраиваемые правила TCP для портов 8888 и 6006 на свой IP-адрес (это позволит вам переходить к информационным панелям TensorBoard и Jupyter Notebook в вашем браузере, как описано в этой средней публикации). Обратите внимание: если у вас когда-либо возникнут проблемы с доступом к машине, вы можете попробовать изменить Источник на 0.0.0.0/0 и посмотреть, не заносится ли в белый список неправильный IP-адрес.

Щелкните «Обзор и запуск». Затем нажмите «Запустить».

Используйте существующую пару ключей или создайте новую и загрузите ее. Вам нужно будет изменить права доступа к ключу, как описано в Руководстве Karpathy:

chmod 600 PEM_FILENAME

Щелкните «Запустить экземпляры». Теперь ваш экземпляр запускается. Перейдите на вкладку экземпляров консоли EC2 (щелкните «Просмотр экземпляров») и укажите IP-адрес своего экземпляра.

Как только ваш экземпляр завершит запуск (он проходит 2/2 проверки статуса), вы можете подключиться к машине по ssh.

ssh -i PEM_FILENAME ec2-user@PUBLIC_IP

Обратите внимание, что имя пользователя имеет решающее значение. Для AMI с установленной Ubuntu (как в учебнике Karpathy) пользователь - «ubuntu», но для AMI Amazon Deep Learning операционная система представляет собой версию Red Hat Enterprise Linux от Amazon, которая использует пользователя «ec2-user».

Поздравляем, ваш компьютер с графическим процессором EC2 работает!

Настройка программного обеспечения

Теперь давайте подготовим машину к запуску Wavenet (в будущем я мог бы создать AMI со всеми установленными зависимостями, но пока вот инструкции). Возьмите файл setup.sh с https://github.com/devinplatt/aws-tensorflow-wavenet и запустите его.

sudo env PATH=$PATH env HOME=$HOME ./setup.sh

Чтобы защитить свой Jupyter Notebook, вам будет предложено ввести пароль и некоторую информацию openssl (которую вы можете оставить пустым).

Обучение модели Wavenet

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

Скачать данные обучения

Мы создаем каталог данных и используем youtube-dl для загрузки аудиофайла на 4 часа фортепианной музыки:

mkdir -p ~/data/wavenet_corpus
cd ~/data/wavenet_corpus
youtube-dl --extract-audio --audio-format wav https://www.youtube.com/watch?v=EhO_MrRfftU

Обучите модель

В сторону: Терминальное мультиплексирование

Терминальное мультиплексирование важно здесь, чтобы гарантировать, что обучение не закончится, когда вы выйдете из сеанса ssh. Я предпочитаю использовать tmux для мультиплексирования. С tmux вы запускаете сеанс, запустив

tmux

Вы можете выйти из tmux в любое время, нажав префикс команды (ctrl-b), а затем «d». Чтобы повторно войти в существующий сеанс, запустите

tmux attach

В tmux вы можете создавать дополнительные окна терминала, используя префикс + c (создать). Вы можете перемещаться по ним, используя префикс + n (следующий) и префикс + p (предыдущий). Вы даже можете назвать их с помощью префикса +, (запятая, я думаю, поскольку «n» уже занято).

Начать обучение

Создайте новое окно tmux и назовите его (например, «поезд»). Затем приступайте к обучению:

cd ~/src/tensorflow-wavenet
python train.py --data_dir=/home/ec2-user/data/wavenet_corpus

Монитор обучения

Создайте новое окно tmux и назовите его (например, «tensorboard»). Затем запустите TensorBoard:

tensorboard --logdir=/home/ec2-user/src/tensorflow-wavenet/logdir

Теперь перейдите в свой веб-браузер к

Http: // PUBLIC_IP: 6006

Обратите внимание, что это должен быть HTTP, а не HTTPS.

Создать аудио

Используйте файл generate.py для генерации вывода. Пример кода ниже:

# 16000 is 1 second (so 160000 is 10 seconds)
python generate.py --wav_out_path=generated.wav --save_every 2000 --samples 160000 /home/ec2-user/src/tensorflow-wavenet/logdir/train/2017–01–15T07–05–36/model.ckpt-12400

Сгенерированный результат можно прослушать на TensorBoard (теоретически, у меня это не работает) или в Jupyter Notebook.

Запустить сервер ноутбука

Откройте окно в мультиплексоре терминала, затем запустите сервер ноутбука jupyter:

cd ~/notebooks
jupyter notebook --certfile=~/certs/mycert.pem --keyfile ~/certs/mycert.key

Теперь перейдите в свой веб-браузер к

Https: // PUBLIC_IP: 8888

Обратите внимание, что адрес ДОЛЖЕН использовать HTTPS, а не HTTP. Кроме того, Google Chrome будет жаловаться на небезопасное соединение. Не обращайте внимания на предупреждение и нажмите «Дополнительно», чтобы перейти к входу в систему, защищенному паролем.

Теперь на странице Jupyter запустите Блокнот и запустите следующий код Python:

audio_fname = '/home/ec2-user/src/tensorflow-wavenet/generated.wav'
import IPython
IPython.display.Audio(audio_fname)

Вы также можете загрузить файлы WAV прямо из записной книжки.

Сохраните модель в S3 для последующего использования

Если вы связали свой экземпляр с ролью IAM, вы можете сохранить модель в S3. Например:

aws s3 cp --recursive /home/ec2-user/src/tensorflow-wavenet/logdir/train/2017–01–15T07–05–36 s3://my-bucket/tensorflow/models/tensorflow-wavenet/logdir/train/2017–01–15T07–05–36/

Код tensorflow-wavenet может восстанавливаться из этих контрольных точек. Обратите внимание, что файл wavenet_params.json должен иметь те же параметры, что и во время первоначального обучения, чтобы это работало. Поэтому вам, вероятно, также следует сохранить файл wavenet_params.json:

aws s3 cp /home/ec2-user/src/wavenet-tensorflow/wavenet_params.json s3://my-bucket/tensorflow/models/tensorflow-wavenet/logdir/train/2017–01–15T07–05–36/

Загрузить предварительно обученную модель

Вы можете использовать код, аналогичный приведенному ниже, для загрузки предварительно обученной модели:

cd /home/ec2-user/src/tensorflow-wavenet
mkdir -p logdir/train/2017–01–15T07–05–36/
aws s3 cp --recursive s3://my-bucket/tensorflow/models/tensorflow-wavenet/logdir/train/2017–01–15T07–05–36/ logdir/train/2017–01–19T07–05–36/
cp logdir/train/2017–01–19T07–05–36/wavenet_params.json .

Обучение продолжается с того места, где оно было остановлено:

python train.py --data_dir=/home/ec2-user/data/wavenet_corpus — logdir logdir/train/2017–01–15T07–05–36/

Следующие шаги

В настоящее время результаты, которые генерируют мои модели, довольно зашумлены. Хотя звуки пианино, сгенерированные глубоким умом, звучат чисто, сгенерированные мной результаты содержат треск и некоторую статику в дополнение к значимому звуку. Я хотел бы поэкспериментировать с обучением модели дольше, используя различные параметры модели (например, для увеличения восприимчивого поля модели), наборы данных для обучения и, возможно, даже некоторые изменения в архитектуре модели, чтобы попытаться достичь качества, подобного глубокому разуму. Если мне удастся повысить качество, я опубликую продолжение с описанием необходимых для этого методов.

Я также мог бы создать производный AMI из AWS Deep Learning AMI с некоторыми установленными моими дополнительными зависимостями и опубликовать несколько ссылок Soundcloud на некоторые выходные данные модели.