Почему API DeepSpeed `estimate_zero2_model_states_mem_needs_…` сообщает об одной и той же памяти для каждого процессора с разными значениями параметра `offload_optimizer`?
Пример, приведенный в документации «Требования к памяти — DeepSpeed 0.10.1», выглядит следующим образом:
python -c 'from deepspeed.runtime.zero.stage_1_and_2 import estimate_zero2_model_states_mem_needs_all_cold; \
estimate_zero2_model_states_mem_needs_all_cold(total_params=2851e6, num_gpus_per_node=8, num_nodes=1)'
Estimated memory needed for params, optim states and gradients for a:
HW: Setup with 1 node, 8 GPUs per node.
SW: Model with 2851M total params.
per CPU | per GPU | Options
127.45GB | 5.31GB | offload_optimizer=cpu
127.45GB | 15.93GB | offload_optimizer=none
Я заметил, чтоper CPU
значение одинаково для обеих строк. Однако принимает значения иnone
соответственно, гдеcpu
Значение параметра теоретически будет хранить состояние и градиент оптимизатора в ЦП, тем самым занимая больше памяти ЦП, что не соответствует отчету API. Я неправильно понимаю реализацию ZeRO2 или DeepSpeed?offload_optimizer
параметр?
Я воспроизвел пример на своей машине.