Вопрос или проблема
Я хотел узнать о параллелизме задач в Cloud Run, поэтому я создал задачу и установил количество задач = 10, и каждому контейнеру я выделяю 8 ГБ памяти и 8 ЦП.
Я установил параллелизм задач на “Запускать столько задач одновременно, сколько возможно”.
Но когда я запускаю эту задачу, она выполняет 10 задач одну за другой, а не одновременно. Почему она не запускает 10 задач параллельно?
Задачи Cloud Run выполняют 10 задач одну за другой
У меня есть файл размером 1,6 ГБ, и ниже приведен мой код, который я запускаю на экземплярах Cloud Run для обработки файла и загрузки данных в BigQuery, просто для тестирования.
import numpy as np
import os
import pandas as pd
project_id = os.environ.get("PROJECT_ID")
task_index = int(os.environ.get("CLOUD_RUN_TASK_INDEX"))
nb_task = int(os.environ.get("CLOUD_RUN_TASK_COUNT"))
print(nb_task)
df_original=pd.read_csv("gs://dataproc-input-321/train.csv")
df_len=len(df_original)
print(df_len)
batch_size=df_len//nb_task
print("--------------batch--------------")
print(batch_size)
# print("размер пакета {}".format(str(batch_size)))
print(f"размер пакета, {batch_size}!")
start_row_no = int(batch_size * task_index)
end_row_no = int(batch_size * (task_index + 1) - 1)
print(f"Для task_id {task_index}, начало {start_row_no} и конец {end_row_no}")
df_sliced=df_original.iloc[start_row_no:end_row_no]
del(df_original)
df_sliced["type"]=np.where(df_sliced["PRODUCT_LENGTH"]%2==0,"even","odd")
df_even=df_sliced[df_sliced["type"] == 'even']
df_odd=df_sliced[df_sliced["type"] == 'odd']
df_even.to_gbq('output_dataset.amazon_even',
project_id=project_id,
if_exists="append"
)
df_odd.to_gbq('output_dataset.amazon_odd',
project_id=project_id,
if_exists="append"
)
Так что я думаю, что 8 ГБ памяти и 8 ЦП достаточно для обработки 1,6 ГБ. Но почему все не выполняется параллельно, если каждый экземпляр получает 8 ГБ памяти и 8 ЦП?
Существует одна опция для ограничения параллелизма под названием “Ограничить количество параллельных задач”, но когда я пытаюсь ввести любое значение больше 0, возникает ошибка – “Не должно превышать 0 для выбранных ЦП и памяти в регионе”.
Я пытался изменить регион, но мне не удается установить параллелизм.
Может кто-нибудь объяснить мне,
- почему не позволяет установить параллелизм вручную?
- почему он выполняет по одной задаче, 10 раз и обрабатывает файлы, когда выбрано “Запускать столько задач одновременно, сколько возможно”?
- Я заметил, что когда я выделял 32 ГБ памяти каждому экземпляру, Cloud Run жалуется, что должно быть минимум 4 ЦП для 32 ГБ памяти, что это такое?
Спасибо заранее.
- Я пытался установить параллелизм задач вручную, но он не позволяет установить значение больше 0.
- Я пробовал запустить в другом регионе, но не смог установить параллелизм задач.
Ответ или решение
Проблема с параллелизмом задач в Google Cloud Run Jobs может возникнуть из-за ряда ограничений в конфигурации ресурсов и архитектуры. Давайте подробно разберем вашу ситуацию и ответим на все ваши вопросы.
Почему не удается установить параллелизм вручную?
-
Ограничения аппаратных ресурсов:
- Google Cloud Run имеет свои правила, касающиеся выделяемых ресурсов (ЦП и оперативной памяти) в зависимости от региона. Если заданное количество ЦП и памяти не соответствует требованиям, система может заблокировать изменения. Например, если вы установили 8 ГБ оперативной памяти, вам нужно выделить как минимум 2 ЦП.
- При использовании высокой памяти (например, 32 ГБ) вам будет необходимо выделить более 4 ЦП. Это ограничение связано с тем, что Cloud Run распределяет ресурсы для обеспечения эффективной работы контейнеров.
-
Политика параллелизма Cloud Run Jobs:
- В Cloud Run Jobs есть две настройки параллелизма: «Запускать столько задач одновременно, сколько возможно» и «Ограничить количество параллельных задач». Если вы не можете установить значение параллелизма выше нуля, это может быть связано с вашими выбранными параметрами памяти и ЦП.
Почему задачи обрабатываются последовательно, несмотря на настройку параллелизма?
-
Параметры конфигурации:
- Если ваши задания обрабатываются последовательно, это может указывать на то, что ресурсы для обеспечения параллелизма не выделены корректно или система не может распределить нагрузки между задачами из-за ограничений ресурсов.
-
Зависимости данных:
- Необходимость синхронизации может привести к последовательной обработке, если одни задачи зависят от результатов других. Убедитесь, что каждая задача независима, и если они должны загружать данные или использовать общие ресурсы, это может ограничивать параллелизм.
-
Региональные ограничения или доступность ресурсов:
- Доступность ресурсов может варьироваться в зависимости от региона. Это может привести к тому, что задачи не могут быть выполнены параллельно из-за нехватки ресурсов в выбранном регионе.
Ошибки при установке ограничений параллелизма
Если при попытке установить значение параллелизма больше нуля возникает ошибка, это говорит о том, что недостаточно ЦП или памяти для вашей конфигурации. Проверьте свои запросы ресурсов и попытайтесь изменить их, чтобы соответствовать требованиям, указанным Google Cloud.
Заключение
Для успешной реализации параллелизма задач в Google Cloud Run Jobs, вам необходимо:
- Проверить соответствие требований к ресурсам для выбранного вами региона.
- Убедиться, что задачи действительно независимы и могут выполняться параллельно.
- Изменить конфигурации ресурсов (ЦП и память) для соответствия установленным требованиям.
Если возникнут дополнительные сложности, воспользуйтесь официальной документацией Google Cloud Run или обратитесь в службу поддержки для получения более детализированной информации.