计算大型矩阵的余弦相似度时进程被终止

问题描述

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 天的余弦相似度计算工作,不到一个小时就完成了。