LXD/GPU Acceleration

From Funtoo
< LXD
Revision as of 20:11, July 17, 2019 by Drobbins (talk | contribs) (Created page with "Setting up GPU-accelerated containers under Funtoo Linux is quite easy. In this example, we will set up a multilib Gentoo container with the ability to access the host GPU. =...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Setting up GPU-accelerated containers under Funtoo Linux is quite easy. In this example, we will set up a multilib Gentoo container with the ability to access the host GPU.

Container Launch

First, let's launch a Gentoo container. By default, LXD configures the remote images: to point to https://images.linuxcontainers.org, and this site hosts Gentoo Linux images. Let's create one as follows:

root # lxc launch images:gentoo gentoo-gpu-test
Creating gentoo-gpu-test
Starting gentoo-gpu-test

Now, let's enter the container and perform an emerge --sync. We will then configure our container to use Intel GPU acceleration, which is what we are using on our host, and we will emerge xorg-x11:

root # lxc exec gentoo-gpu-test -- su --login
gentoo-gpu-test ~ # emerge --sync
gentoo-gpu-test ~ # echo 'VIDEO_CARDS="intel i915 i965"' >> /etc/portage/make.conf
gentoo-gpu-test ~ # emerge -auDN @world xorg-x11 --jobs

Once this completes, we are close to having GPU acceleration but need to perform a few more steps.

Host Setup

On your regular system (which we will refer to as your "host"), since it "hosts" the containers, you will want to inspect the setting of your DISPLAY environment variable:

user $ echo $DISPLAY
:1

We will want to set the container to use this value. We will also want to add a GPU to our container configuration. Run the following command on the host to edit the container's configuration. You will want to add the environment.DISPLAY setting, as well as copy the devices: section in the container config below:

root # lxc config edit gentoo-gpu-test

You will be presented with a YAML file which contains the configuration for the container. You will want to modify the container configuration to contain the

   "gentoo-gpu-test configuration"
### This is a yaml representation of the configuration.
### Any line starting with a '# will be ignored.
###
### A sample configuration looks like:
### name: container1
### profiles:
### - default
### config:
###   volatile.eth0.hwaddr: 00:16:3e:e9:f8:7f
### devices:
###   homedir:
###     path: /extra
###     source: /home/user
###     type: disk
### ephemeral: false
###
### Note that the name is shown but cannot be changed

architecture: x86_64
config:
  environment.DISPLAY: :1
  image.architecture: amd64
  image.description: Gentoo current amd64 (20190717_17:39)
  image.os: Gentoo
  image.release: current
  image.serial: "20190717_17:39"
  volatile.base_image: 2c71e864b7bf2a3e3e5719b2857d68c7f7c3b2f1c364ae58bfe0fc3cbaffda21
  volatile.eth0.host_name: vethAHRHQJ
  volatile.eth0.hwaddr: 00:16:3e:2a:d2:ac
  volatile.idmap.base: "0"
  volatile.idmap.current: '[{"Isuid":true,"Isgid":false,"Hostid":100000,"Nsid":0,"Maprange":1000000000},{"Isuid":false,"Isgid":true,"Hostid":100000,"Nsid":0,"Maprange":100000>
  volatile.idmap.next: '[{"Isuid":true,"Isgid":false,"Hostid":100000,"Nsid":0,"Maprange":1000000000},{"Isuid":false,"Isgid":true,"Hostid":100000,"Nsid":0,"Maprange":100000000>
  volatile.last_state.idmap: '[{"Isuid":true,"Isgid":false,"Hostid":100000,"Nsid":0,"Maprange":1000000000},{"Isuid":false,"Isgid":true,"Hostid":100000,"Nsid":0,"Maprange":100>
  volatile.last_state.power: RUNNING
devices:
  X11-unix:
    path: /tmp/.X11-unix
    source: /tmp/.X11-unix
    type: disk
  mygpu:
    type: gpu
ephemeral: false
profiles:
- default
stateful: false
description: ""