小编Kev*_*vin的帖子

当可用 RAM 小于文件大小时,Numpy memmap 使用 Pytorch Dataloader 进行限制

我正在处理一个太大而无法放入 RAM 的数据集。我目前正在尝试的解决方案是使用 numpy memmap 使用 Dataloader 一次加载一个样本/行。解决方案看起来像这样:

class MMDataset(torch.utils.data.Dataset):
    def __init__(self, path):
        self.file_path = path
        self.dataset_len = 44000000
        self.bytes_per_value = 32/8
        self.num_cols = 512
        self.num_rows = 1


    def __getitem__(self, index):


        x = np.memmap(self.file_path, dtype='float32', mode='r', shape=(
            self.num_rows, self.num_cols), offset=int(index*self.num_cols*self.bytes_per_value))

        return np.array(x)

    def __len__(self):
        return self.dataset_len



dataset = MMDataset('./data/emb.memmap')

data_loader = DataLoader(
    dataset,
    batch_size=4096,
    shuffle=True,
    num_workers=20
)

Run Code Online (Sandbox Code Playgroud)

可用RAM量大于memmap文件的大小时,数据加载速度很快我每秒处理大约60 批。但是,当可用 RAM 小于 memmap 文件的大小时,我得到大约 3 个批次/秒

我在尝试不同大小的 memmap 文件时发现了这一点。

为什么会这样呢?如果当可用 RAM < memmap 文件大小时 Dataloader …

numpy numpy-memmap pytorch dataloader

5
推荐指数
0
解决办法
668
查看次数

JuMP 中带有矢量化变量的用户定义(非线性)目标

是否可以在 JuMP for Julia 中将向量化变量与用户定义的目标函数一起使用?就像这样,

model = Model(GLPK.Optimizer)

A = [
    1 1 9 5
    3 5 0 8
    2 0 6 13
]

b = [7; 3; 5]

c = [1; 3; 5; 2]

@variable(model, x[1:4] >= 0)
@constraint(model, A * x .== b)

# dummy functions, could be nonlinear hypothetically
identity(x) = x
C(x, c) = c' * x

register(model, :identity, 1, identity; autodiff = true)
register(model, :C, 2, C; autodiff = true)
@NLobjective(model, Min, C(identity(x), c))
Run Code Online (Sandbox Code Playgroud)

这会引发错误, …

julia julia-jump

5
推荐指数
1
解决办法
683
查看次数

标签 统计

dataloader ×1

julia ×1

julia-jump ×1

numpy ×1

numpy-memmap ×1

pytorch ×1