可以将计算外包给 AWS 并在本地使用结果吗?
Possible to outsource computations to AWS and utilize results locally?
我正在开发一个使用 CNN 的机器人,它需要的内存比我的嵌入式计算机 (Jetson TX1) 可以处理的要多得多。我想知道是否有可能(通过极低的延迟连接)将繁重的计算外包给 EC2 并将结果发送回 Python 脚本中使用。如果这是可能的,我将如何处理它以及延迟是什么样的(不是计算,只是发送和发送)。
可能:当然是。
您可以使用任何类型的 RPC 来实现它。 HTTPS 请求、xml-rpc、原始 UDP 数据包等等。如果您对延迟和少量数据更感兴趣,那么基于 UDP 的东西可能比 TCP 更好,但是您需要构建额外的逻辑来对消息进行排序并重试丢失的消息。或者像 Zeromq
这样的东西可能会有所帮助。
至于延迟:只有您可以回答,因为这取决于您从哪里连接。在离你最近的区域启动一个实例,然后 运行 ping
或 mtr
与之相对,以找出往返时间是多少。这是您可以达到的绝对最低限度。您的处理时间最重要。
我认为这当然是可能的。您需要一些脚本或网络服务器来传输数据。以下是我认为您可以实现的方式:
- 将所有训练数据发送到 EC2 实例
- 训练你的 CNN
- 保存权重 and/or 您可能需要的任何其他生成的参数
- 在您的嵌入式系统上构建 CNN 并输入权重
来自 EC2 实例。因为你不需要做任何训练
在这里不需要加载训练集,内存使用
将是最小的。
- 使用您的嵌入式设备预测您可能需要的任何东西
由于您没有提供足够的信息,所以很难就延迟问题给您一个准确的答案。确切的延迟 很高 取决于你的硬件、互联网连接、你要传输的数据量、软件等。如果你只在初始训练集上训练一次,你只需要转移你的重量一次,因此延迟可以忽略不计。如果您不断地发送数据和训练,或者在远程服务器上进行预测,延迟会更高。
我是 CENAPAD-UFC(塞阿拉联邦大学国家 HPC 中心)的前雇员,所以我对外包计算机能力有话要说。
CENAPAD集群很大,为学术研究提供计算能力。在那里,教授和学生发送他们的计算和数据,定义输出并去喝一两杯咖啡,而集群继续努力工作。经过多次失败后,操作结束,他们通过 ssh 检索它并返回到他们的笔记本电脑。
对于大块计算,您希望尽量减少任何无用计算的工作。其中之一就是通过独立计算机进行通信。如果您需要知道计算何时结束,请让 HPC 机器告诉您。
为了有效地计算东西,您可能需要更深入地研究机器并执行某种分布。我使用 OpenMP 在同一个 machine/thread 分布中分布计算。为了在物理上分开的计算机之间进行分配,但接下来(延迟),我使用 MPI。我还在 UFC 中为另一个部门安装了另一个集群。在那里,研究人员只使用了 MPI。
也许一些关于 distributed/grid/clusterized 计算的阅读可以帮助您:
- https://en.m.wikipedia.org/wiki/SETI@home;我听说的第一个大规模分布式计算的例子
- https://en.m.wikipedia.org/wiki/Distributed_computing
- https://en.m.wikipedia.org/wiki/Grid_computing
- https://en.m.wikipedia.org/wiki/Supercomputer;这是 CENAPAD 之类的东西
在我看来,您希望使用类似网格的计算,将您的个人 PC 作为可以调用 EC2 从节点的主节点;在这种情况下,只需使用从主机到从机的通信来发送程序(如果确实需要)和数据,这样主机就会有另一件事与发送的数据无关;另外,当计算结束时,让奴隶告诉你的主人。
我正在开发一个使用 CNN 的机器人,它需要的内存比我的嵌入式计算机 (Jetson TX1) 可以处理的要多得多。我想知道是否有可能(通过极低的延迟连接)将繁重的计算外包给 EC2 并将结果发送回 Python 脚本中使用。如果这是可能的,我将如何处理它以及延迟是什么样的(不是计算,只是发送和发送)。
可能:当然是。
您可以使用任何类型的 RPC 来实现它。 HTTPS 请求、xml-rpc、原始 UDP 数据包等等。如果您对延迟和少量数据更感兴趣,那么基于 UDP 的东西可能比 TCP 更好,但是您需要构建额外的逻辑来对消息进行排序并重试丢失的消息。或者像 Zeromq
这样的东西可能会有所帮助。
至于延迟:只有您可以回答,因为这取决于您从哪里连接。在离你最近的区域启动一个实例,然后 运行 ping
或 mtr
与之相对,以找出往返时间是多少。这是您可以达到的绝对最低限度。您的处理时间最重要。
我认为这当然是可能的。您需要一些脚本或网络服务器来传输数据。以下是我认为您可以实现的方式:
- 将所有训练数据发送到 EC2 实例
- 训练你的 CNN
- 保存权重 and/or 您可能需要的任何其他生成的参数
- 在您的嵌入式系统上构建 CNN 并输入权重 来自 EC2 实例。因为你不需要做任何训练 在这里不需要加载训练集,内存使用 将是最小的。
- 使用您的嵌入式设备预测您可能需要的任何东西
由于您没有提供足够的信息,所以很难就延迟问题给您一个准确的答案。确切的延迟 很高 取决于你的硬件、互联网连接、你要传输的数据量、软件等。如果你只在初始训练集上训练一次,你只需要转移你的重量一次,因此延迟可以忽略不计。如果您不断地发送数据和训练,或者在远程服务器上进行预测,延迟会更高。
我是 CENAPAD-UFC(塞阿拉联邦大学国家 HPC 中心)的前雇员,所以我对外包计算机能力有话要说。
CENAPAD集群很大,为学术研究提供计算能力。在那里,教授和学生发送他们的计算和数据,定义输出并去喝一两杯咖啡,而集群继续努力工作。经过多次失败后,操作结束,他们通过 ssh 检索它并返回到他们的笔记本电脑。
对于大块计算,您希望尽量减少任何无用计算的工作。其中之一就是通过独立计算机进行通信。如果您需要知道计算何时结束,请让 HPC 机器告诉您。
为了有效地计算东西,您可能需要更深入地研究机器并执行某种分布。我使用 OpenMP 在同一个 machine/thread 分布中分布计算。为了在物理上分开的计算机之间进行分配,但接下来(延迟),我使用 MPI。我还在 UFC 中为另一个部门安装了另一个集群。在那里,研究人员只使用了 MPI。
也许一些关于 distributed/grid/clusterized 计算的阅读可以帮助您:
- https://en.m.wikipedia.org/wiki/SETI@home;我听说的第一个大规模分布式计算的例子
- https://en.m.wikipedia.org/wiki/Distributed_computing
- https://en.m.wikipedia.org/wiki/Grid_computing
- https://en.m.wikipedia.org/wiki/Supercomputer;这是 CENAPAD 之类的东西
在我看来,您希望使用类似网格的计算,将您的个人 PC 作为可以调用 EC2 从节点的主节点;在这种情况下,只需使用从主机到从机的通信来发送程序(如果确实需要)和数据,这样主机就会有另一件事与发送的数据无关;另外,当计算结束时,让奴隶告诉你的主人。