Проблема возникает, когда я пытаюсь создать экземпляр объекта LLM внутри функции, но этого не происходит, если я создаю экземпляр объекта в родительском процессе или глобальной области. Это говорит о том, что у VLLM есть проблемы с созданием объектов в функциях и управлением ими, что приводит к удержанию памяти и нехватке графического процессора.
Вот упрощенная версия кода:
Код: Выделить всё
import torch
import gc
from vllm import LLM
def run_vllm_eval(model_name, sampling_params, path_2_eval_dataset):
# Instantiate LLM in a function
llm = LLM(model=model_name, dtype=torch.float16, trust_remote_code=True)
# Run some VLLM inference or evaluation here (simplified)
result = llm.generate([path_2_eval_dataset], sampling_params)
# Clean up after inference
del llm
gc.collect()
torch.cuda.empty_cache()
# After this, GPU memory is not cleared properly and causes OOM errors
run_vllm_eval()
run_vllm_eval()
run_vllm_eval()
Код: Выделить всё
llm = run_vllm_eval2()
llm = run_vllm_eval2(llm)
llm = run_vllm_eval2(llm)
Даже после явного удаления объекта LLM и очистки кэша память графического процессора не освобождается должным образом, что приводит к выходу из строя. ошибки памяти (OOM) при попытке загрузить или запустить другую модель в том же сценарии.
Что я пробовал:
- Удаление объекта LLM с помощью del.
- Запуск gc.collect() для запуска сборки мусора Python.
- Использование torch.cuda.empty_cache (), чтобы очистить память CUDA.
- Убедиться, что в родительском процессе не создаются экземпляры объектов VLLM.
Вопросы:
- Кто-нибудь сталкивался аналогичные проблемы с памятью при создании объектов VLLM внутри функций?
- Существует ли рекомендуемый способ управления или очистки объектов VLLM в функции, чтобы предотвратить сохранение памяти графического процессора?
< li>Существуют ли в этом контексте конкретные методы обработки VLLM, которые отличаются от стандартных моделей Hugging Face или PyTorch?
Подробнее здесь: https://stackoverflow.com/questions/789 ... explicitly