问题描述
id
当我对两个矩阵进行余弦相似时,这个过程就会被终止。 我在机器上得到以下日志:
changeID = (id,index) =>{
this.setState(prev =>{
return {
recipes : prev.recipes.map((recipe,i) =>{
if(index === i) return {...recipe,id}
return recipe
})
}
})
}
如果我使用 # A: 14287 * 768 array,B: 863394 * 768 array
def cosine_similarity(A,B):
A = torch.tensor(A).to('cpu') ; B = torch.tensor(B).to('cpu')
num = torch.mm(A,B.T)
p1 = torch.sqrt(torch.sum(A**2,axis=1))[:,None]
p2 = torch.sqrt(torch.sum(B**2,axis=1))[None,:]
return (num/(p1*p2)).T
而不是 [Apr 5 14:38] python invoked oom-killer: gfp_mask=0x100dca(GFP_HIGHUSER_MOVABLE|__GFP_ZERO),order=0,oom_score_adj=0
[ +0.000003] oom_kill_process+0xe6/0x120
[ +0.000001] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/user.slice,task=python,pid=8103,uid=1000
[ +0.000013] Out of memory: Killed process 8103 (python) total-vm:81517744kB,anon-RSS:61879912kB,file-RSS:4kB,shmem-RSS:0kB,UID:1000 pgtables:154388kB oom_score_adj:0
,我仍然会收到如下 OOM 错误:
np.array
解决方法
这就是 Linux oom (out of memory) killer,它会在可用内存严重不足时选择要终止的进程。您可以通过添加 RAM 或交换空间来避免这种情况,或者重组您的计算以处理更小的数据块。
,最终使用了 FAISS 库,该库通过使用其高效的搜索算法和利用 GPU 显着减少了时间。一个看似耗时 2 天的余弦相似度计算工作,不到一个小时就完成了。