我正在尝试优化weigtsPytorch 中的一些权重 ( ) 但我不断收到此错误:
RuntimeError: [CPUAllocator.cpp:64 处强制失败]。DefaultCPUAllocator:无法分配内存:您尝试分配 8000000000000 字节。错误代码 12(无法分配内存)。
也就是说,当我跑步时事情就会爆炸(weights * col).sum() / weights.sum()。Weights 是一个大小为 (1000000,1) 的张量,col 也是一个大小为 (1000000, 1) 的张量。两个张量的大小都合适,但奇怪的是我用完了计算机中的所有内存(8GB)来进行这些操作。
我正在使用 grpc 发送一些非常大的消息(网络上机器学习模型的参数)。问题是当我进行 grpc 调用时出现以下错误:
grpc: received message larger than max (261268499 vs. 4194304)
Run Code Online (Sandbox Code Playgroud)
正如其他帖子中所建议的,我尝试增加通道和 grpc 服务器上的最大消息大小,但我一直收到相同的错误。关于如何让它发挥作用的任何想法?
我的服务器代码:
maxMsgLength = 1024 * 1024 * 1024
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10),
options=[('grpc.max_message_length', maxMsgLength),
('grpc.max_send_message_length', maxMsgLength),
('grpc.max_receive_message_length', maxMsgLength)])
Run Code Online (Sandbox Code Playgroud)
客户端:
maxMsgLength = 1024 * 1024 * 1024
channel = grpc.insecure_channel(ip_port,
options=[('grpc.max_message_length', maxMsgLength),
('grpc.max_send_message_length', maxMsgLength),
('grpc.max_receive_message_length', maxMsgLength)])
Run Code Online (Sandbox Code Playgroud)
编辑:
不是解决方案,但也许可以更深入地了解问题。出于某种原因,如果我将最大消息大小设置为 1024 * 1024 * 1024,它最终会默认为 4194304,正如错误消息所暗示的那样。不太确定为什么会这样。但无论如何,我尝试将最大消息大小减小到 1024 * 1024 * 200,它在错误消息 (209715200) 中显示了正确的最大消息大小。似乎存在 grpc 未正确设置最大消息大小的问题。不知道如何解决这个问题。
在错误消息显示正确最大值的情况下,我可以使用的最大数量是 2^28。如果我将最大消息大小设置为 2^29,则默认为 4194304。