亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 Go SDK 將 `--gpus all` 選項傳遞給 Docker?

如何使用 Go SDK 將 `--gpus all` 選項傳遞給 Docker?

Go
慕的地8271018 2023-02-14 17:33:54
我已經從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)}
查看完整描述

1 回答

?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

請參閱: https: //github.com/docker/cli/blob/9ac8584acfd501c3f4da0e845e3a40ed15c85041/cli/command/container/opts.go#L594


import "github.com/docker/cli/opts"


// ...


gpuOpts := opts.GpuOpts{}

gpuOpts.Set("all")


resp, err := cli.ContainerCreate(ctx, &container.Config{

    Image: "nvidia/cuda:10.0-base",

    Cmd:   []string{"echo", "hello world"},

    // Tty:   false,

}, &container.HostConfig{Resources: container.Resources{DeviceRequests: gpuOpts.Value()}}, nil, nil, "")



查看完整回答
反對 回復 2023-02-14
  • 1 回答
  • 0 關注
  • 190 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號