运行 尝试使用 pytorch 创建大小为 [2191, 512] 的张量以使用 CLIP 保存电影帧中的数据时内存不足
Run out of memory trying to create a tensor of size [2191, 512] with pytorch to save data from movie frames using CLIP
我是第一次使用 pytorch,我遇到了一个我认为不应该遇到的问题。我目前在 jpg 中选择了 2919 帧的电影。我正在尝试将所有这些图像转换为单个张量。我正在使用 CLIP 将每个图像转换为大小为 [1, 512] 的张量。最后,我希望有一个大小为 [2919, 512] 的张量,它不应该使用那么多内存。但是我的代码永远不会完成 运行,我只能假设我做错了什么。
首先,我正在导入并加载模型:
import torch
import clip
from glob import glob
from PIL import Image
device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = clip.load("ViT-B/32", device=device)
其次,我正在读取所有图像的路径并使用随机值初始化“电影”张量以覆盖它们。我尝试生成一个空的并连接,但这也消耗了太多内存:
path_names = glob(r"Films/**/*.jpg")
film = torch.rand((len(files), 512), dtype=torch.float32, device = device)
film_frame_count = 0
for file in files:
print("Frame " + str(film_frame_count) + " out of " + str(len(files)))
film[film_frame_count] = model.encode_image(preprocess(Image.open(file)).unsqueeze(0).to(device))[0]
film_frame_count += 1
torch.save(film, 'output_tensor/'+ film_code[1])
如果有人能指出我做错了什么,我将不胜感激。
问题最终是因为 pytorch 正在为图形保存梯度,所以我需要指出我不希望它们与顶部的这个指标一起存储:
with torch.no_grad():
/*my code*/
我是第一次使用 pytorch,我遇到了一个我认为不应该遇到的问题。我目前在 jpg 中选择了 2919 帧的电影。我正在尝试将所有这些图像转换为单个张量。我正在使用 CLIP 将每个图像转换为大小为 [1, 512] 的张量。最后,我希望有一个大小为 [2919, 512] 的张量,它不应该使用那么多内存。但是我的代码永远不会完成 运行,我只能假设我做错了什么。
首先,我正在导入并加载模型:
import torch
import clip
from glob import glob
from PIL import Image
device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = clip.load("ViT-B/32", device=device)
其次,我正在读取所有图像的路径并使用随机值初始化“电影”张量以覆盖它们。我尝试生成一个空的并连接,但这也消耗了太多内存:
path_names = glob(r"Films/**/*.jpg")
film = torch.rand((len(files), 512), dtype=torch.float32, device = device)
film_frame_count = 0
for file in files:
print("Frame " + str(film_frame_count) + " out of " + str(len(files)))
film[film_frame_count] = model.encode_image(preprocess(Image.open(file)).unsqueeze(0).to(device))[0]
film_frame_count += 1
torch.save(film, 'output_tensor/'+ film_code[1])
如果有人能指出我做错了什么,我将不胜感激。
问题最终是因为 pytorch 正在为图形保存梯度,所以我需要指出我不希望它们与顶部的这个指标一起存储:
with torch.no_grad():
/*my code*/