Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

convert gpus to DeviceRequests with implicit "gpu" capability #12197

Merged
merged 1 commit into from
Oct 9, 2024

Conversation

ndeloof
Copy link
Contributor

@ndeloof ndeloof commented Oct 9, 2024

What I did

This adds support for gpus to align with docker CLI
Coucou Guillaume 🥰

Related issue
compose-spec/compose-go#693

(not mandatory) A picture of a cute animal, if possible in relation to what you did
image

Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
Copy link
Contributor

@glours glours left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@glours glours merged commit 9eeb2d3 into docker:main Oct 9, 2024
28 checks passed
@ndeloof ndeloof deleted the gpus branch October 9, 2024 13:19
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Nov 21, 2024
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [docker/compose](https://github.com/docker/compose) | minor | `v2.29.7` -> `v2.30.3` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>docker/compose (docker/compose)</summary>

### [`v2.30.3`](https://github.com/docker/compose/releases/tag/v2.30.3)

[Compare Source](docker/compose@v2.30.2...v2.30.3)

#### What's Changed

##### 🐛 Fixes

-   Avoid starting all services on rebuild by [@&#8203;jhrotko](https://github.com/jhrotko) [(12258)](docker/compose#12258)

##### ⚙️ Dependencies

-   Bump compose-go v2.4.4 by [@&#8203;glours](https://github.com/glours) [(12274)](docker/compose#12274)

**Full Changelog**: docker/compose@v2.30.2...v2.30.3

### [`v2.30.2`](https://github.com/docker/compose/releases/tag/v2.30.2)

[Compare Source](docker/compose@v2.30.1...v2.30.2)

#### What's Changed

##### 🐛 Fixes

-   Service being declared in a profile must not trigger re-creation by [@&#8203;ndeloof](https://github.com/ndeloof) in [(12265)](docker/compose#12265)
-   Remove ArtifactType from Config in OCI v1.1 definition of the artifact by [@&#8203;glours](https://github.com/glours) [(12266)](docker/compose#12266)

##### 🔧  Internal

-   Add Joana Hrotko to Maintainers by [@&#8203;laurazard](https://github.com/laurazard) [(12253)](docker/compose#12253)
-   Add profile e2e test case to document in compose by [@&#8203;jhrotko](https://github.com/jhrotko) [(12252)](docker/compose#12252)

##### ⚙️ Dependencies

-   Bump `compose-go` to version `v2.4.3` by [@&#8203;glours](https://github.com/glours) in docker/compose#12261

**Full Changelog**: docker/compose@v2.30.1...v2.30.2

### [`v2.30.1`](https://github.com/docker/compose/releases/tag/v2.30.1)

[Compare Source](docker/compose@v2.30.0...v2.30.1)

#### What's Changed

##### 🐛 Fixes

Fix regression when using stdin as input of `-f` flag  [(12248)](docker/compose#12248)
Fix regression when using multiple time the same YAML anchor in a Compose file  [(12247)](docker/compose#12247)

##### ⚙️ Dependencies

-   bump compose-go to version v2.4.2 by [@&#8203;glours](https://github.com/glours) in docker/compose#12249

**Full Changelog**: docker/compose@v2.30.0...v2.30.1

### [`v2.30.0`](https://github.com/docker/compose/releases/tag/v2.30.0)

[Compare Source](docker/compose@v2.29.7...v2.30.0)

#### What's Changed

##### ✨ Improvements

-   Introduce service hooks by [@&#8203;ndeloof](https://github.com/ndeloof)  [(12166)](docker/compose#12166)
-   Introduce generate command as alpha command by [@&#8203;glours](https://github.com/glours) [(12209)](docker/compose#12209)
-   Add export command by [@&#8203;jarqvi](https://github.com/jarqvi)  [(12120)](docker/compose#12120)
-   Add support for CDI device request using `devices` by [@&#8203;ndeloof](https://github.com/ndeloof) [(12184)](docker/compose#12184)
-   Add support for bind recursive by [@&#8203;ndeloof](https://github.com/ndeloof)  [(12210)](docker/compose#12210)
-   Allow usage of `-f` flag with OCI Compose artifacts by [@&#8203;glours](https://github.com/glours)  [(12220)](docker/compose#12220)

##### 🐛 Fixes

-   Append unix-style relative path when computing container target path by [@&#8203;ndeloof](https://github.com/ndeloof)  [(12145)](docker/compose#12145)
-   Wait for dependent service up to delay set by --wait-timeout by [@&#8203;ndeloof](https://github.com/ndeloof)  [(12156)](docker/compose#12156)
-   Check secret source exists, as bind mount would create target by [@&#8203;ndeloof](https://github.com/ndeloof)  [(12151)](docker/compose#12151)
-   After container restart register printer consumer by [@&#8203;jhrotko](https://github.com/jhrotko)  [(12158)](docker/compose#12158)
-   Fix(down): Fix down command if specified services are not running by [@&#8203;idsulik](https://github.com/idsulik)  [(12164)](docker/compose#12164)
-   Show watch error message and open DD only when w is pressed by [@&#8203;jhrotko](https://github.com/jhrotko)  [(12165)](docker/compose#12165)
-   Fix(push): Fix unexpected EOF on alpha publish by [@&#8203;idsulik](https://github.com/idsulik)  [(12169)](docker/compose#12169)
-   Fix(convergence): Serialize access to observed state by [@&#8203;anantadwi13](https://github.com/anantadwi13)  [(12150)](docker/compose#12150)
-   Remove feature flag integration with Docker Desktop for ComposeUI and ComposeNav by [@&#8203;jhrotko](https://github.com/jhrotko)  [(12192)](docker/compose#12192)
-   Support Dockerfile-specific ignore-file with watch by [@&#8203;ndeloof](https://github.com/ndeloof) [(12193)](docker/compose#12193)
-   Add support for raw env_file format by [@&#8203;ndeloof](https://github.com/ndeloof)  [(12179)](docker/compose#12179)
-   Convert GPUs to DeviceRequests with implicit "gpu" capability by [@&#8203;ndeloof](https://github.com/ndeloof)  [(12197)](docker/compose#12197)
-   Improve error message to include expected network label by [@&#8203;divinity76](https://github.com/divinity76)  [(12213)](docker/compose#12213)
-   Don't use progress to render restart, which hides logs by [@&#8203;ndeloof](https://github.com/ndeloof)  [(12226)](docker/compose#12226)
-   One-off containers are not indexed, and must be ignored by `exec --index` command by [@&#8203;ndeloof](https://github.com/ndeloof)  [(12224)](docker/compose#12224)
-   Don't warn about uid/gid not being supported while ... they are by [@&#8203;ndeloof](https://github.com/ndeloof)  [(12232)](docker/compose#12232)
-   Connect to external networks by name by [@&#8203;ndeloof](https://github.com/ndeloof)  [(12234)](docker/compose#12234)
-   Fix push error message typo by [@&#8203;chris-crone](https://github.com/chris-crone)  [(12237)](docker/compose#12237)
-   Fix(dockerignore): Add wildcard support to dockerignore.go by [@&#8203;idsulik](https://github.com/idsulik)  [(12239)](docker/compose#12239)

##### 🔧  Internal

-   Remove bind options when creating a volume type by [@&#8203;jhrotko](https://github.com/jhrotko) [(12177)](docker/compose#12177)
-   pass device.options to engine by [@&#8203;ndeloof](https://github.com/ndeloof)  [(12183)](docker/compose#12183)
-   Add security policy by [@&#8203;thaJeztah](https://github.com/thaJeztah)  [(12194)](docker/compose#12194)
-   Gha: set default permissions to "contents: read" by [@&#8203;thaJeztah](https://github.com/thaJeztah)  [(12195)](docker/compose#12195)
-   Desktop: allow this client to be identified via user-agent by [@&#8203;djs55](https://github.com/djs55)  [(12212)](docker/compose#12212)
-   Compose-go clean volume target to avoid ambiguous comparisons by [@&#8203;ndeloof](https://github.com/ndeloof)  [(12208)](docker/compose#12208)

##### ⚙️ Dependencies

-   Bump docker `v27.3.1` by [@&#8203;ndeloof](https://github.com/ndeloof)  [(12178)](docker/compose#12178)
-   Build(deps): bump `golang.org/x/sys` from `0.25.0` to `0.26.0` by [@&#8203;dependabot](https://github.com/dependabot) [(12189)](docker/compose#12189)
-   Bump `compose-go` to `v2.3.0` by [@&#8203;glours](https://github.com/glours)  [(12198)](docker/compose#12198)
-   Bump `compose-go` to `v2.4.0` by [@&#8203;glours](https://github.com/glours)  [(12231)](docker/compose#12231)
-   Bump `compose-go` to `v2.4.1` by [@&#8203;glours](https://github.com/glours)  [(12243)](docker/compose#12242)
-   Build(deps): bump github.com/containerd/containerd from 1.7.22 to 1.7.23 by [@&#8203;dependabot](https://github.com/dependabot)  [(12211)](docker/compose#12211)
-   Bump golang minimal version to `1.22` in go.mod by [@&#8203;glours](https://github.com/glours)  [(12246)](docker/compose#12246)
-   Bump `go.uber.org/mock` to `v0.5.0` and `google.golang.org/grpc` to `v1.67.1` by [@&#8203;glours](https://github.com/glours)  [(12245)](docker/compose#12245)

#### New Contributors

-   [@&#8203;anantadwi13](https://github.com/anantadwi13) made their first contribution in docker/compose#12150
-   [@&#8203;jarqvi](https://github.com/jarqvi) made their first contribution in docker/compose#12120
-   [@&#8203;djs55](https://github.com/djs55) made their first contribution in docker/compose#12212
-   [@&#8203;divinity76](https://github.com/divinity76) made their first contribution in docker/compose#12213

**Full Changelog**: docker/compose@v2.29.7...v2.30.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40NDAuNyIsInVwZGF0ZWRJblZlciI6IjM3LjQ0MC43IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiXX0=-->
@polarathene
Copy link

Was this meant to have documentation at https://docs.docker.com/reference/compose-file/services ?

I assume gpus: all is valid? (to match --gpus all), not able to test that any time soon.

The CLI docs also specifically refer to --gpus as only for nvidia, I'm not sure if that's outdated or a limitation (I'm aware of AMD just relying on devices field, rather than deploy.resources.reservations.devices, but maybe that also works with --gpus all these days 🤷‍♂️).

@ndeloof
Copy link
Contributor Author

ndeloof commented Jan 15, 2025

gpus: all is not allowed as model uses a deviceRequest struct, but we could introduce such a shortcut notation.
AFAIK docker engine only supports nvidia GPUs, but from compose point of view this is vendor-neutral: we just forward device capabilities request to engine, which has to find adequate device to match.

@polarathene
Copy link

we could introduce such a shortcut notation

I assumed that was one of the main conveniences in supporting this alternative 😅 (to have parity with the docker CLI --gpus all example that is commonly documented)


AFAIK docker engine only supports nvidia GPUs, but from compose point of view this is vendor-neutral: we just forward device capabilities request to engine, which has to find adequate device to match.

From what I've seen with AMD (and presumably Intel), those two are stuck with the more verbose deploy config, however CDI with --device / device: appears to be the preferred way going forward once the vendors better support it (I've seen third-party tools to generate the CDI configs needed on the host).

Presently it might only be nvidia with proper support (I've not tried the CDI support yet, but have read there might be some extra changes required, and Docker Desktop / WSL2 may also affect compatibility). So at the same time I'm not sure how beneficial gpus: all is to users of Compose (Podman and k8s both adopted CDI).

I imagine for consistency with docker CLI that gpus: all should be supported, but docs should likewise direct users towards CDI (I have no clue how long that will remain behind a daemon feature flag to use though, which adds some friction).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants