Google ColaboratoryでLLMを動かしていて下記のエラーが出た。
model = AutoModelForCausalLM.from_pretrained(MODEL_NAME, device_map='auto')
ValueError: The current
device_maphad weights offloaded to the disk. Please provide anoffload_folderfor them. Alternatively, make sure you havesafetensorsinstalled if the model you are using offers the weights in this format.
「Please provide an offload_folder」(offload_folderを指定してください)と書いてあるが「さっきは問題なく動いたのに試行錯誤してるうちに動かなくなったなぁ」の場合はその処置は適切ではない、という罠がある。
これは「GPUもメモリも足りないからディスクを使って遅いけど無理やり動かすね!」という状態。
The current
device_maphad weights offloaded to the disk.
このエラーが発生する前にサイレントにメモリへのオフロードが起きている
Counter(model.hf_device_map.values())が本来Counter({0: 28, 'cpu': 15})なのにCounter({'cpu': 41, 0: 2})になってたりする。これは気づきにくい。hf_device_mapを教えてもらって色々観察してようやく理解したmodel.generateでOutOfMemoryError: CUDA out of memory.になったりするPythonにはGCがあるのになぜこれが起きるか
model = AutoModelForCausalLM.from_pretrained(MODEL_NAME, device_map='auto')のケースでは今これを試してる py
model = None
tokenizer = None
torch.cuda.empty_cache()
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, use_fast=False)
model = AutoModelForCausalLM.from_pretrained(MODEL_NAME, device_map='auto')