问题描述
我已经在笔记本中使用AWS提供的语义分段算法训练了一个模型。 将训练有相同尺寸图像的512x512尺寸的图像馈送到该网络大约需要10秒钟。馈送大小为1024x512的图像大约需要两倍的时间。
这感觉像是荒谬的时间,所以我更深入地研究,使用gluoncv和基于AWS语义分段的mxnet将模型加载到EC2实例中。
在这里,我找到了一个ctx标志,用于声明要使用CPU还是GPU。 我在AWS上找不到该标志,因此我认为必须根据我选择运行的实例在后台处理该标志。
但是,将笔记本上训练的模型加载到为GPU设置的EC2实例中时,出现以下错误: “ RuntimeError:参数'fcn0_resnetv1s_conv0_weight'尚未在上下文gpu(0)上初始化。仅在[cpu(0)]上初始化。”
我将其解释为仅在CPU上运行的网络,并依次解释了为什么通过网络提供512x512图像需要10秒的时间。
我在这里想念什么吗? 如何使AWS提供的语义分割算法可以在GPU上运行?
关于, C
解决方法
According to its documentation SageMaker语义分段支持CPU和GPU进行推理。
SageMaker内置算法容器无法部署在笔记本电脑中,它们只能通过托管端点或批处理转换来部署。因此,如果要部署到GPU,则需要在struct MyDestination: View {
var color: Color
var body: some View {
Text("Hello,MyDestination").background(color)
}
}
struct ContentView: View {
var body: some View {
NavigationView {
VStack {
NavigationLink(destination: MyDestination(color: Color.yellow)) {
Text("Yellow")
}
}
.navigationTitle("Menu Demo").navigationBarTitleDisplayMode(.inline)
.toolbar {
ToolbarItem(placement: .primaryAction) {
Menu {
NavigationLink(destination: MyDestination(color: Color.red)) {
Text("Red")
}
Button("Blue",action: { print("Blue") })
} label: {
Label("",systemImage: "ellipsis.circle").imageScale(.large)
}
}
}
}
}
}
调用或终结点创建SDK调用(如果不使用Python SDK)中指定支持GPU的计算机
某些算法具有相当透明的内部结构(例如语义分割算法),使您可以离线读取它们,例如在笔记本电脑或自定义环境中。
在这种情况下,为了自己运行GPU推理,您需要在GPU上下文中同时包含模型和输入。要将模型移至GPU,可以使用model.deploy()