Введение

В предыдущем сообщении в блоге мы говорили о машинном обучении на Google Cloud Platform с использованием Persistor и облачных функций, однако мало говорили о стоимости. Мы сказали, что использование Google Cloud Functions дешево, но это все. Что ж, вам больше не нужно верить нам на слово, так как мы собираемся углубиться в цены на все компоненты, которые мы использовали в предыдущем посте, а также провести сравнение с альтернативным подходом — с использованием тензорной обработки. unit (TPU) — специализированное оборудование, предназначенное для приложений искусственного интеллекта и машинного обучения. Имейте в виду, что у Google есть бесплатный уровень использования для новых пользователей, который оплачивается иначе, чем описано в этом сообщении в блоге (некоторые вещи могут быть бесплатными).

Цены на облачные функции

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

Вы платите за облачные функции на основе вашего взаимодействия с ними. Это называется ценообразованием с оплатой по мере использования, и это означает, что Google не будет выставлять вам счет за наличие функций, но будет выставлять вам счет за их вызов и использование. Облачные функции Google в основном оцениваются в зависимости от времени выполнения функции, количества ее вызовов, количества используемых ресурсов и расширения вашего проекта на другие регионы Google Cloud, поскольку с вас может взиматься плата за передачу данных.

Более того, вызовы функций оплачиваются по фиксированной ставке независимо от источника вызова. Первые 2 миллиона вызовов бесплатны, после этого цена составляет 0,40 доллара США за миллион вызовов. Если мы быстро посчитаем, это означает, что после 2 миллионов бесплатных вызовов один вызов стоит 0,0000004 доллара США. Довольно дешево, если вы спросите нас :)

Время выполнения (время вычисления) функции — это время с момента вызова вашей функции до момента ее завершения, возможно, после успешного завершения задания, а также в случае возникновения ошибки или тайм-аута. Время выполнения измеряется с приращением в 100 мс, округленным до ближайшего приращения. Плата за время вычислений зависит от объема памяти (ГБ-секунд) и ЦП (ГГц), выделенных для функции. ГБ-секунды — это секунды времени вычислений, умноженные на объем выделенной памяти в гигабайтах (например, 1 ГБ-секунда — это 1 секунда времени выполнения с 1 ГБ выделенной памяти), а ГГц-секунды — это секунды времени выполнения, умноженные на часы. частота выделенного ЦП в гигагерцах (например, 1 ГГц-секунда соответствует 1 секунде времени работы с выделенным ЦП 1 ГГц). В следующей таблице показаны 7 различных типов конфигураций Google Cloud Function и связанные с ними затраты — обратите внимание, что выбор памяти и ЦП связан вместе. Вы можете видеть, что есть два разных столбца с разными ценами. В частности, существуют две разные модели ценообразования, называемые уровнем 1 и уровнем 2, и они определяются в зависимости от региона.

Цены на облачный TPU

TPU — это сокращение от тензорного процессора. TPU обрабатывает тензоры, которые представляют собой причудливые матрицы (подробнее об этом), что удобно, когда у вас есть проблема машинного обучения, которую вы хотите обучить или протестировать. Тем не менее, Google Cloud TPU могут быть довольно дорогими, и для их подключения и использования требуется виртуальная машина Compute Engine (VM). Мы собираемся разбить затраты, связанные с наличием и использованием Google Cloud TPU и их виртуальных машин.

Плата за TPU и виртуальные машины взимается, даже если вы не используете их активно. По сути, пока у вас есть узел TPU, с вас взимается плата независимо от того, используете вы его или нет. Есть два способа зарядки TPU. Один из них называется ценообразованием для одного устройства (это означает, что у вас работает только один узел TPU и этот узел не может быть подключен к другим), а другой называется ценообразованием типа модуля TPU (для кластеров, содержащих несколько устройств TPU, доступных только для тех, у кого есть обязательство на 1 или 3 года).

Типы TPU для одного устройства оплачиваются с шагом в одну секунду и доступны либо по запросу, либо по цене с вытеснением. Упреждающий означает, что ваш TPU может отключиться в любое время, если общее использование велико, что приводит к более низкой цене, но также означает, что вы должны учитывать эти неожиданные отключения при программировании своих приложений. В таблице ниже показаны цены для региона europe-west4 Нидерланды (мы использовали версии 3–8).

Плата за TPU и виртуальные машины взимается отдельно, поэтому указанные цены относятся только к TPU. Узнать больше о ценах на ВМ можно здесь. Совершенно очевидно, что такое решение проблем машинного обучения может стать довольно дорогим и довольно быстрым, что мы рассмотрим чуть позже.

Виртуальные машины, контейнеры и бессерверные решения

Облачные функции и облачный TPU (вместе с виртуальной машиной Compute Engine) представляют собой два очень разных подхода к облачным вычислениям с точки зрения степени контроля над ресурсами, которую вы имеете, и того, сколько вы за это платите.

Виртуальные машины (ВМ) являются частью инфраструктуры как услуги (IaaS). Это модель, которая дает вам максимальный контроль над вашими ресурсами, но с контролем также приходит ответственность за обслуживание и безопасность ОС, работающей на вашей виртуальной машине. Виртуальным машинам также требуются дополнительные оплачиваемые ресурсы, такие как постоянное хранилище и сеть.

Основными строительными блоками платформы как услуги (PaaS) являются контейнеры. Ваш код вместе со всеми его зависимостями упакован в контейнер, который можно легко запускать в разных операционных системах и средах. Однако реальная мощь контейнеров проявляется в форме оркестрации, которая позволяет автоматически развертывать и масштабировать ваше приложение. Вы можете узнать больше о Kubernetes, самом известном программном обеспечении для оркестровки контейнеров Docker, в записи блога Ena.

Функции как услуга (FaaS) представляют собой самый высокий уровень абстракции в облачных вычислениях, где вы все еще можете программировать приложение. FaaS также называют бессерверными функциями не потому, что они не работают на сервере, а потому, что этот серверный уровень полностью скрыт от пользователя и управляется облачным провайдером. Ресурсы и время выполнения здесь, как правило, гораздо более ограничены, например, вы не можете подключить графический процессор к облачной функции на GCP, а один экземпляр может работать только в течение 9 минут, прежде чем истечет время ожидания.

Вкратце, программное обеспечение как услуга (SaaS) представляет собой пользовательские приложения, счета за которые оплачиваются по модели оплаты по факту использования. Вы не можете вносить изменения в такие приложения. Примеры включают Office 365, Salesforce, Slack и многие другие.

1.1 Локальные и бессерверные решения — клиенты любят решения (customers-love-solutions.com)

Итак, что выбрать? Ну, это зависит от вашего приложения. По мере того, как люди переходят на компонентный подход от больших монолитных приложений, виртуальные машины в значительной степени теряют популярность в пользу контейнерных решений из-за их повышенной гибкости. Возможно, для вашего варианта использования требуется достаточно простое решение, которое можно запустить как бессерверную функцию. Не воспринимайте простое слишком сильно, поскольку мы доказали, что вы можете выполнять довольно сложные вычисления, такие как обучение нейронных сетей бессерверным функциям.

Прочие расходы (Pub/Sub, хранилище, SQL)

Ценообразование Pub/Sub состоит из трех компонентов: стоимость пропускной способности для публикации и доставки сообщений, плата за хранение при сохранении всех или подтвержденных сообщений или создании моментальных снимков, а также стоимость исходящего трафика при пересечении границ зоны или региона. Важно отметить, что хранение неподтвержденных сообщений является бесплатным. Google также предлагает более дешевый вариант Pub/Sub Lite, который может быть на порядок дешевле, но предлагает меньше функций и требует больше ручной настройки.

В нашем конкретном случае мы не настроили хранилище для подтвержденных сообщений, так как об этом позаботится Persistor, поскольку все наши ресурсы находились в одном регионе, и плата за исходящий трафик не взималась. Это означает, что мы заплатили бы только за пропускную способность (публикация и доставка сообщений), однако первые 10 ГиБ в календарном месяце бесплатны, так что в основном Pub/Sub нам ничего не стоил!

Базовое использование Облачного хранилища оплачивается в соответствии с хранением данных, использованием сети, использованием операций и другими параметрами при использовании некоторых дополнительных расширенных функций. Стоимость хранения данных зависит от континента и измеряется в гигабайтах в месяц. Цены на использование сети делятся на исходящие (данные, отправляемые из GCS) и входящие (данные, отправляемые в GCS). Операции — это действия, которые вносят изменения или извлекают информацию о корзинах и объектах в Cloud Storage. Они разделены на классы и оплачиваются по 10 000 штук. В рамках ограничений на использование Always Free 5 ГБ в месяц, 5000 операций класса A и 50 000 операций класса B, а также 1 ГБ исходящего сетевого трафика предоставляются бесплатно, но только в трех регионах США.

Цены на Cloud SQL зависят от того, используете ли вы выделенный или общий ЦП. Выделенные инстансы тарифицируются по количеству ядер и объему памяти. Инстансы с общим ядром оплачиваются за каждую секунду работы инстанса. Важно отметить, что экземпляры с общим ядром не подпадают под действие Соглашения об уровне обслуживания Cloud SQL (SLA) и не рекомендуются для производственных сред. Все экземпляры Cloud SQL несут расходы на хранение и подключение к сети, а вход в Cloud SQL бесплатный.

Сравнение экспериментов и затрат

Давайте сравним использование двух совершенно разных облачных решений — Cloud Functions и Cloud TPU — для решения одной и той же задачи машинного обучения — обучения сверточной нейронной сети (CNN) на наборе данных MNIST. Обучающий набор состоит из 60 000 образцов монохромных изображений 28x28. При использовании Cloud Functions данные публиковались 6 раз, разбитые на 10 сообщений по 1000 выборок в каждом. Имейте в виду, что Persistor также является двумя облачными функциями, которые также потенциально могут повлечь за собой затраты (отсюда большое количество вызовов). Цена всего этого? Восемь жалких центов (0,08 доллара).

Глядя на Cloud TPU, он кажется значительно более дорогим, и это так, но, возможно, не так сильно, как может показаться на этом изображении. Облачный TPU несет расходы, когда он находится в состоянии READY, поэтому не обязательно только при выполнении вычислений. Мы следовали руководству Google Запуск MNIST на Cloud TPU, и нам потребовалось некоторое время, чтобы все правильно настроить. Во время всего этого Cloud TPU был заряжен, хотя он не проводил обучения нейронной сети или других вычислений.

В целом TPU требуется менее 5 минут для обучения нейронной сети на всем наборе данных MNIST. Даже если мы посмотрим на цену за такой короткий интервал (около 0,72 доллара США), она все равно на порядок выше по сравнению с использованием облачных функций. Вы также должны принять во внимание, что для запуска Cloud TPU требуется базовая виртуальная машина Compute Engine, что может привести к значительным затратам, связанным с использованием ЦП, памяти, хранилища и сети, что приведет к ненужным накладным расходам.

Заключение

«Выберите правильный инструмент для работы» — хороший вывод из всей этой истории. Но что означает право в облачных вычислениях? Может быть, проще устранить то, что было бы неправильно в этом контексте. Использование мощного решения, такого как Cloud TPU, для решения относительно простой проблемы, такой как MNIST, было бы большим нет-нет. Только настройка и тестирование этого решения за полдня обошлось нам почти в 40 баксов! Вам потребуется значительное количество времени и усилий, чтобы настроить TPU и его виртуальную машину масштабируемым способом, который не требует затрат, когда они не используются. Все эти возможности масштабирования и гибкости уже заложены в Cloud Functions, так почему бы не использовать их для достижения наших целей при минимально возможных затратах?

Наряду с тем, какую мощность мы хотим получить от наших облачных ресурсов, мы также должны решить, какой уровень контроля мы хотим иметь над ними. Решения, предоставляющие пользователям больший контроль, такие как виртуальные машины, могут обеспечить лучшую конфигурируемость, но создание и поддержание идеальной конфигурации требует времени, навыков и труда — и все это стоит денег. Часто лучше использовать предварительно настроенные шаблоны, но, возможно, неожиданным образом, как мы вам показали ;)

Первоначально опубликовано на https://www.syntio.net, 28 января 2022 г.