gpu_acceleration flag & nvidia hacking

This commit is contained in:
Sam Sartor
2025-12-29 20:35:31 -07:00
parent 3dd36f1c72
commit 03d7259d6b
8 changed files with 44 additions and 11 deletions

6
NVIDIA.md Normal file
View File

@@ -0,0 +1,6 @@
install:
dkms
linux-headers-$(uname-r)
then run:
https://us.download.nvidia.com/XFree86/aarch64/580.119.02/NVIDIA-Linux-aarch64-580.119.02.run

0
build/README.md Normal file
View File

View File

@@ -5,7 +5,3 @@
+ firmware-libertas
+ firmware-misc-nonfree
+ firmware-realtek
+ libnvidia-container-tools
+ libnvidia-container1
+ nvidia-container-toolkit
+ nvidia-driver

20
core/src/lxc/gpu_config Normal file
View File

@@ -0,0 +1,20 @@
# NVIDIA Devices Spe
lxc.cgroup2.devices.allow: c 235:* rwm
# DRM devices
lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=di
# Device IDs for /dev/dri, check `ls -l /dev/dri`
lxc.cgroup2.devices.allow: c 226:* rwm
# Nvidia nodes
lxc.mount.entry: /dev/nvidia0 dev/nvidia0 none bind,optional,create=file
lxc.mount.entry: /dev/nvidiactl dev/nvidiactl none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-uvm dev/nvidia-uvm none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-modeset dev/nvidia-modeset none bind,optional,create=file
# Device IDs for /dev/nvidia*, check `ls -l /dev/nvidia*`
lxc.cgroup2.devices.allow: c 195:* rwm
lxc.cgroup2.devices.allow: c 500:* rwm
lxc.cgroup2.devices.allow: c 503:* rwm

View File

@@ -174,11 +174,11 @@ impl LxcContainer {
let machine_id = hex::encode(rand::random::<[u8; 16]>());
let container_dir = Path::new(LXC_CONTAINER_DIR).join(&*guid);
tokio::fs::create_dir_all(&container_dir).await?;
tokio::fs::write(
container_dir.join("config"),
format!(include_str!("./config.template"), guid = &*guid),
)
.await?;
let mut config_str = format!(include_str!("./config.template"), guid = &*guid);
if config.gpu_acceleration {
config_str += include_str!("./gpu_config");
}
tokio::fs::write(container_dir.join("config"), config_str).await?;
// TODO: append config
let rootfs_dir = container_dir.join("rootfs");
let rootfs = OverlayGuard::mount(
@@ -414,7 +414,10 @@ impl Drop for LxcContainer {
}
#[derive(Default, Serialize)]
pub struct LxcConfig {}
pub struct LxcConfig {
pub gpu_acceleration: bool,
}
pub async fn connect(ctx: &RpcContext, container: &LxcContainer) -> Result<Guid, Error> {
use axum::extract::ws::Message;

View File

@@ -251,6 +251,10 @@ impl TryFrom<ManifestV1> for Manifest {
git_hash: value.git_hash,
os_version: value.eos_version,
sdk_version: None,
gpu_acceleration: match value.main {
PackageProcedure::Docker(d) => d.gpu_acceleration,
PackageProcedure::Script(_) => false,
},
})
}
}

View File

@@ -62,6 +62,8 @@ pub struct Manifest {
pub dependencies: Dependencies,
#[serde(default)]
pub hardware_requirements: HardwareRequirements,
#[serde(default)]
pub gpu_acceleration: bool,
pub git_hash: Option<GitHash>,
#[serde(default = "current_version")]
#[ts(type = "string")]

View File

@@ -96,7 +96,9 @@ impl PersistentContainer {
.join("logs")
.join(&s9pk.as_manifest().id),
),
LxcConfig::default(),
LxcConfig {
gpu_acceleration: s9pk.manifest.gpu_acceleration,
},
)
.await?;
let rpc_client = lxc_container.connect_rpc(Some(RPC_CONNECT_TIMEOUT)).await?;