Подтвердить что ты не робот

Какое максимальное количество виртуальных процессорных ядер доступно в AWS Lambda?

Я пытаюсь найти максимальное количество виртуальных процессорных ядер, доступных в AWS Lambda. Официальная документация подразумевает, что она масштабируется с объемом сконфигурированной памяти:

В модели ресурсов AWS Lambda вы выбираете объем памяти, который вы хотите для своей функции, и распределены пропорциональная мощность ЦП и другие источники. Например, выбор 256 МБ памяти выделяет примерно в два раза больше мощности процессора для вашей лямбда-функции, как запросив 128 Мбайт памяти и вдвое больше мощности процессора, чем выбор 512 МБ памяти.

Однако запуск следующего фрагмента дает мне Number of cores = 2, даже если я настрою максимальный объем запрашиваемой памяти: 1536 МБ.

package example;

import java.io.{ InputStream, OutputStream }

class Main {
  def main(input: InputStream, output: OutputStream): Unit = {   
    val result = "Number of cores = " + Runtime.getRuntime().availableProcessors()
    output.write(result.getBytes("UTF-8"))
  }
}

Итак, что здесь происходит? Я использую availableProcessors() неправильно или неправильно интерпретировал его результат неправильно? Или есть некоторые другие конфигурации, которые нуждаются в получении большего количества ядер?

4b9b3361

Ответ 1

Согласно AWS Lambda документации и forum, AWS не указывает, какие типы экземпляров AWS использует эту услугу. В конце 2014 года AWS использовали экземпляры, оптимизирующие вычисления. И теперь AWS использует экземпляры общего назначения.

Доля процессора, выделенная для функции, основывается на доле его выделенной памяти на каждый из двух ядер. Например, экземпляр с ~ 3 ГБ памяти, доступный для лямбда-функций, где каждый функция может иметь до 1 ГБ памяти, в большинстве случаев вы можете использовать ~ 1/3 * 2 ядра = 2/3 от CPU. Детали могут быть пересмотрены в будущее, но это дробный характер нашей модели использования.

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

В настоящее время нет способа настроить CPU. Только общая память, которую вы можете настроить.

Ответ 2

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

Таким образом, ваша учетная запись может одновременно работать с 100 лямбда-функциями, что вы можете увидеть как 100 ядер (однако это не так). Если вы запросите увеличение лимита, это также может быть 1000 или 10000 или 100 000.

Аналогия: вместо того, чтобы иметь 1 100-ядерный компьютер, у вас есть 100 1-ядерных компьютеров.

Ответ 3

Хотя до сегодняшнего дня AWS не раскрывал никаких подробностей относительно вычислительной мощности функций AWS Lambda, теперь они сделали это после объявления об увеличении максимальной памяти с 1536 МБ до 3008 МБ. Их документация сейчас гласит:

Функциям, размер которых превышает 1536 МБ, выделяется несколько потоков ЦП, и для использования дополнительной производительности необходим многопоточный или многопроцессорный код.

Исходя из этого, можно сделать вывод, что все функции AWS Lambda до 1536 МБ памяти имеют одно доступное ядро виртуального процессора, в то время как функции с большим объемом памяти имеют два доступных ядра.

Обновить:

Хотя эта часть документации больше не доступна, Крис Маннс (Chris Munns) из AWS недавно в день безавтоматического запуска AWS 2018-07-10 сообщил, что все функции AWS Lambda с более чем 1,8 ГБ памяти работают на нескольких ядрах. Таким образом, по-видимому, граница между одноядерным и многоядерным функциями AWS Lambda изменилась с 1,5 ГБ до 1,8 ГБ.

Ответ 4

Ответ на ваш вопрос. Он написал:

В модели ресурсов AWS Lambda вы выбираете объем памяти, который вы хотите для своей функции, и выделяются пропорциональные мощность процессора и другие ресурсы.

Я предполагаю, что верхний предел ядер равен 2, но другие параметры ЦП выше.

Ответ 5

Здесь список типов EC2, которые вы можете развернуть, и соответствующее количество ядер:

https://aws.amazon.com/ec2/virtualcores/

Максимальное количество ядер - 32.

Это особенно удобно, если вы используете систему H2O.ai Machine Learning, которая палатализована, так что 32 ядра могут теоретически работать в 16 раз быстрее, чем 2-ядерная машина. (На практике это будет меньше.)

Но мой ответ не касается того, какая базовая доступность находится на AWS Lambda.  AWS, кажется, молчит по этому вопросу... Он говорит о максимальном количестве потоков, но если у вас недостаточно ядер для обработки всех работающих потоков...