I tried openSUSE LEAP 16 again with the e9173 card and Gnome (would prefer KDE, but that might have been part of the problem), now it's working. Got updates done, got vulkan installed, got a couple other amdgpu tools installed. Downloaded the localAI and ran it... Says no GPU detected, CPU only.
Installed vulkan tools and checked the following:
Code:
greg@artdumb:~/Downloads> MESA_VK_DEVICE_SELECT=list vulkaninfo
WARNING: [Loader Message] Code 0 : Layer VK_LAYER_MESA_device_select uses API version 1.3 which is older than the application specified API version of 1.4. May cause issues.
selectable devices:
GPU 0: 1002:699f "AMD Embedded Radeon E9170 Series (RADV POLARIS12)" discrete GPU 0000:01:00.0
GPU 1: 1002:15dd "AMD Ryzen Embedded V1756B with Radeon Vega Gfx (RADV RAVEN)" integrated GPU 0000:04:00.0
So it shows both GPU, but not sure how to get localAI to use vulkan and then to use both cards or at least pick the fastest (probably igpu) to run models on. Have some studying to do. I know nothing about vulkan (yet), so guidance would be welcome.
I did keep the Debian13 version on a different drive, when I get the best result, and if I decide to keep this machine doing what it's doing, I'll switch back to the larger nvme and start from scratch with all the fixes I find along the way.
And before anyone asks, the machine name, due to it's inherent slowness, is Artificial Dumbness (artdumb).
Okay - so, I feel like sometimes, the fastest way to get something working is to...well, get it done the fastest way possible (i.e. Occam's razor).
For me, before you even get down to Docker and deal with the device passthroughs and API inanities, think of the fastest way you can get a local LLM setup going using 4 commands or less. For me, at least, that's
lemonade-AI (which runs from Windows Linux or MacOS, or Docker/Snap/whatever), and depending on which distro you are working on, it's either add-repo and go (Ubuntu) or wget the package and run (Fedora and Debian. Of course, the headache isn't getting it to install and fire up, the headache is to try and get everything working correctly.
For example, for me, I have an idle t540, t640 and a t740 here - my t740 was running Proxmox (essentially Debian 13) so getting it to run Lemonade Server should not be an issue...unfortunately the power brick needs to be replaced so that's out for the moment. The t640 with USB-PD power input is currently non-functional (due to my proxmox Vega iGPU offloading experiments) so I am down to the t540...which is currently my frigate box (well, it has a docker image hosting 0.17) running Ubuntu 24.04 LTS, and as the Frigate box it has the Coral TPU running just fine as-is. It also has a single 8GB DDR4-2166
SODIMM and a 128GB NVMe SSD, but since it's an experimental box running something low duty, that's perfectly fine as-is.
Challenge 1: Okay, so Lemonade runs locally. How do you get lemonade to act as a server?
Easy...via the command line:
Code:
lemonade config set host=0.0.0.0
service lemond restart
Verify using:
Code:
lemonade config | grep host
And then connect to port 13305 of the IP where Lemonade is running - either use the web browser or the nice GUI app available on MacOS or Windows, and point the server URL to the one running.
Challenge 2: How do you verify that Vulkan is actually working on the iGPU?
First, make sure that the packages in Debian/Ubuntu is present:
Code:
apt-get -y install libvulkan1 mesa-vulkan-drivers vulkan-tools
Run vulkaninfo and make sure that it's not just dumping everything into llvmpipe (basic vulkan compute/software rendering pipeline), and that it's actually seeing actual GPU hardware.
And then download/install amdgpu_top, which gives you a nice little util to check the GPU ASIC component utilization and approximate power draw -

Note that the
Vega 3 Embedded iGPU (gfx902 Raven2) inside the t540 doesn't exactly have the best specs (only 3 CUs or compute units), and its modest performance is further gimped on the t540 by running with passive cooling on a plastic chassis and featuring only a single memory channel (which eats into throughput even more). The prompt token rate (18 t/s) and slow sustained token-walking speed (3 t/sec) isn't great but it's not really indicative of its potential. The
Vega 8 embedded on the t740 should at least give you 2-3x the prompt processing rate even if the token walk rate will probably only go from 3 to maybe 6-7 due to the bandwidth limitations. For a better idea, well, the Vega 5 CU (
Radeon Graphics 320SP) on my mt46 mobile thin client is between the Vega 3 and 8, and it can perform
at about 150 t/s prompt processing and 7-9 t/s tokenwalking on a 12 Billion parameter Gemma-4 model with MTP . The Vega 6 CU (
Radeon Graphics 384SP) on the t755 has almost the same theoretical numbers as the Vega 8, and it can do about 90 t/s on prompt processing and token walks at ~11 t/s (keep in mind that this is on a machine that's mostly used as a hypervisor so the prompt processing rates might be slightly lower than expected), and that should probably give you a number to watch out for.
Also note that it's possible for a large chunk of the compute to happen within the CPU despite reporting vulkan support since it's possible for the Vulkan driver to send the compute to a software-only codepath (llvmpipe or something else) instead of hardware (but since it's being sent to the Vulkan driver which can only schedule tasks onto actual GPU compute units instead of the potentially single threaded software codepath) the CPU might not have all cores pegged out - that's why it's important to check the actual GPU for execution metrics (which is what amdgpu_top is good for).
Challenge 3: iGPU VRAM and GTT.
So within AMD iGPUs there are 2 values that you need to care about - namely VRAM (which is the RAM that the memory controller reserved for the iGPU's exclusive use, once allocated it's no longer accessible to the OS...this can be as high as 2GB in the HP x40 series thin clients, if I remember correctly) and GTT, which is the size of RAM pool that the iGPU driver is allowed to borrow from for its tasks...which by default is set by AMD to be 50% of the total RAM pool and can be overridden to use as high as 75% as long as you have at least 16GB of RAM to start (but that might be specific to certain iGPUs). So what does that mean? Well, in my t540 with one stick of 8GB DDR4
SODIMM in a single channel, wth 512MB allocated as "VRAM", we have....
Code:
grep amdgpu /var/log/kern.log | grep GTT
(8096 - 512 )/2 = 3792 MB, give it about 256MB for auxilary buffers and whatnot, and 3659MB for that 50% looks about right. Note that whatever LLM you load into the iGPU via GTT, the original filesize has no bearing on the eventual unfolded size of the LLM in your VRAM. When in doubt shove more RAM in; but do keep in mind the inherent limitations of your hardware.