mirror of
https://github.com/nextcloud/all-in-one.git
synced 2025-12-19 22:16:49 +00:00
add support for nvidia gpu access (#5132)
Signed-off-by: Mondo <mondo.jiang@wisc.edu> Signed-off-by: Jean-Yves <7360784+docjyJ@users.noreply.github.com> Signed-off-by: Simon L. <szaimen@e.mail.de> Co-authored-by: Jean-Yves <7360784+docjyJ@users.noreply.github.com> Co-authored-by: Simon L. <szaimen@e.mail.de>
This commit is contained in:
parent
119d03694e
commit
53edc5d4a9
17 changed files with 92 additions and 11 deletions
|
|
@ -23,6 +23,7 @@ readonly class Container {
|
|||
private array $secrets,
|
||||
/** @var string[] */
|
||||
private array $devices,
|
||||
private bool $enable_nvidia_gpu,
|
||||
/** @var string[] */
|
||||
private array $capAdd,
|
||||
private int $shmSize,
|
||||
|
|
@ -92,6 +93,10 @@ readonly class Container {
|
|||
return $this->devices;
|
||||
}
|
||||
|
||||
public function isNvidiaGpuEnabled() : bool {
|
||||
return $this->enable_nvidia_gpu;
|
||||
}
|
||||
|
||||
public function GetCapAdds() : array {
|
||||
return $this->capAdd;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -249,6 +249,11 @@ readonly class ContainerDefinitionFetcher {
|
|||
$devices = $entry['devices'];
|
||||
}
|
||||
|
||||
$enableNvidiaGpu = false;
|
||||
if (is_bool($entry['enable_nvidia_gpu'])) {
|
||||
$enableNvidiaGpu = $entry['enable_nvidia_gpu'];
|
||||
}
|
||||
|
||||
$capAdd = [];
|
||||
if (isset($entry['cap_add'])) {
|
||||
$capAdd = $entry['cap_add'];
|
||||
|
|
@ -312,6 +317,7 @@ readonly class ContainerDefinitionFetcher {
|
|||
$dependsOn,
|
||||
$secrets,
|
||||
$devices,
|
||||
$enableNvidiaGpu,
|
||||
$capAdd,
|
||||
$shmSize,
|
||||
$apparmorUnconfined,
|
||||
|
|
|
|||
|
|
@ -983,6 +983,17 @@ class ConfigurationManager
|
|||
}
|
||||
}
|
||||
|
||||
private function GetEnabledNvidiaGpu() : string {
|
||||
$envVariableName = 'ENABLE_NVIDIA_GPU';
|
||||
$configName = 'enable_nvidia_gpu';
|
||||
$defaultValue = '';
|
||||
return $this->GetEnvironmentalVariableOrConfig($envVariableName, $configName, $defaultValue);
|
||||
}
|
||||
|
||||
public function isNvidiaGpuEnabled() : bool {
|
||||
return $this->GetEnabledNvidiaGpu() === 'true';
|
||||
}
|
||||
|
||||
private function GetKeepDisabledApps() : string {
|
||||
$envVariableName = 'NEXTCLOUD_KEEP_DISABLED_APPS';
|
||||
$configName = 'nextcloud_keep_disabled_apps';
|
||||
|
|
|
|||
|
|
@ -491,6 +491,17 @@ readonly class DockerActionManager {
|
|||
$requestBody['HostConfig']['Devices'] = $devices;
|
||||
}
|
||||
|
||||
if ($container->isNvidiaGpuEnabled() && $this->configurationManager->isNvidiaGpuEnabled()) {
|
||||
$requestBody['HostConfig']['Runtime'] = 'nvidia';
|
||||
$requestBody['HostConfig']['DeviceRequests'] = [
|
||||
[
|
||||
"Driver" => "nvidia",
|
||||
"Count" => 1,
|
||||
"Capabilities" => [["gpu"]],
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
$shmSize = $container->GetShmSize();
|
||||
if ($shmSize > 0) {
|
||||
$requestBody['HostConfig']['ShmSize'] = $shmSize;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue