我已經從SDK 示例中了解了如何執行一些基本命令,例如運行容器、拉取圖像、列出圖像等。我正在做一個項目,我需要在容器中使用 GPU。我的系統有 GPU,我已經安裝了驅動程序,我還安裝了nvidia-container-runtime.如果我們暫時從場景中刪除 Go SDK,我可以運行以下命令來獲取nvidia-smi主機系統上的輸出:docker run -it --rm --gpus all nvidia/cuda:10.0-base nvidia-smi我必須通過 SDK 執行此操作。這是開始的代碼。此代碼打印“hello world”。但實際上我會nvidia-smi在那個地方運行命令:package mainimport ( "context" "os" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/container" "github.com/docker/docker/client" "github.com/docker/docker/pkg/stdcopy")func main() { ctx := context.Background() cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation()) if err != nil { panic(err) } RunContainer(ctx, cli)}func RunContainer(ctx context.Context, cli *client.Client) { reader, err := cli.ImagePull(ctx, "nvidia/cuda:10.0-base", types.ImagePullOptions{}) if err != nil { panic(err) } defer reader.Close() // io.Copy(os.Stdout, reader) resp, err := cli.ContainerCreate(ctx, &container.Config{ Image: "nvidia/cuda:10.0-base", Cmd: []string{"echo", "hello world"}, // Tty: false, }, nil, nil, nil, "") if err != nil { panic(err) } if err := cli.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}); err != nil { panic(err) } statusCh, errCh := cli.ContainerWait(ctx, resp.ID, container.WaitConditionNotRunning) select { case err := <-errCh: if err != nil { panic(err) } case <-statusCh: } out, err := cli.ContainerLogs(ctx, resp.ID, types.ContainerLogsOptions{ShowStdout: true}) if err != nil { panic(err) } stdcopy.StdCopy(os.Stdout, os.Stderr, out)}
如何使用 Go SDK 將 `--gpus all` 選項傳遞給 Docker?
慕的地8271018
2023-02-14 17:33:54