- Die eingebauten Grafikchips von Intels Meteor-Lake-Architektur, wie sie z.B. in meinem Laptop verbaut sind, sind auch für Pytorch nutzbar – das Stichwort dazu ist xpu statt cuda. Auf meinem Laptop (Intel Core Ultra 7 155H, Meteor Lake-P [Intel Arc Graphics]) habe ich damit einen Inferenz-Task von 56:15 min, 39.71s/it auf 07:29 min, 5.69s/it beschleunigt, also ca. auf ⅐.
Es sind drei Dinge nötig:
-
- Siehe auf der Intel-Seite. Hier beschrieben für Debian Unstable (≈ Anleitungen für Ubuntu 24.10)
- GPU-Treiber:
- Man lege die Datei
/etc/apt/sources.list.d/intel-graphics.sources
mit folgendem Inhalt an:Types: deb URIs: https://ppa.launchpadcontent.net/kobuk-team/intel-graphics/ubuntu Suites: oracular Components: main Signed-By: /etc/apt/keyrings/intel-graphics.asc Types: deb-src URIs: https://ppa.launchpadcontent.net/kobuk-team/intel-graphics/ubuntu Suites: oracular Components: main Signed-By: /etc/apt/keyrings/intel-graphics.asc
- Auf dem ppa:kobuk-team/intel-graphics lade man den Signing Key (die .asc-Datei) herunter und lege sie in
/etc/apt/keyrings/intel-graphics.asc
ab - dann:
sudo apt update # Install the compute-related packages sudo apt install libze-intel-gpu1 libze1 intel-metrics-discovery intel-opencl-icd clinfo intel-gsc # Install the media-related packages sudo apt install intel-media-va-driver-non-free libmfx1 libmfx-gen1 libvpl2 libvpl-tools libva-glx2 va-driver-all vainfo # Install development libraries, needed for pytorch sudo apt install libze-dev intel-ocloc
- Man lege die Datei
- Intel Deep Learning Essentials
/etc/apt/sources.list.d/intel-oneapi.sources
:Types: deb URIs: https://apt.repos.intel.com/oneapi Suites: all Components: main Signed-By: /etc/apt/keyrings/oneapi-archive-keyring.gpg
- Der Schlüssel kann so heruntergeladen werden:
# download the key to system keyring wget -qO- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB \ | sudo gpg --dearmor -o /etc/apt/keyrings/oneapi-archive-keyring.gpg
- Installation:
sudo apt update sudo apt install intel-deep-learning-essentials-2025.0
- Das Framework ist dann in /opt/intel/oneapi. Intel empfiehlt noch, folgendes Setup in die .bashrc / .zshrc aufzunehmen, das ist aber für Pytorch via pip nicht zwingend notwendig.
source /opt/intel/oneapi/compiler/2025.0/env/vars.sh source /opt/intel/oneapi/umf/0.9/env/vars.sh source /opt/intel/oneapi/pti/0.10/env/vars.sh
- GPU-Treiber:
- Siehe auf der Intel-Seite. Hier beschrieben für Debian Unstable (≈ Anleitungen für Ubuntu 24.10)
-
- Die Varianten liegen, wie bei Pytorch übrig, in einem eigenen Index. Für uv (uv-Doku zu Pytorch) kann man das z.B. so in der
pyproject.toml
konfigurieren, danach kann man dann mituv sync --extra=xpu
(bzw. CPU bzw. cu121) für XPU/CUDA 12/CPU installieren:# optional dependencies (extras). Use with, e.g., uv sync --extra=xpu or pip install projectname[cpu] [project.optional-dependencies] cpu = ["torch>=2.5.1"] cu121 = ["torch>=2.5.1"] xpu = ["torch>=2.5.1", "pytorch-triton-xpu ; sys_platform == 'linux'"] # the extra dependency groups are mutually exclusive [tool.uv] conflicts = [[{ extra = "cpu" }, { extra = "xpu" }, { extra = "cu121" }]] # for each package listed as key, specify a specific index (~ pypi) to use depending on the extra [tool.uv.sources] torch = [ { index = "pytorch-cpu", extra = "cpu" }, { index = "pytorch-xpu", extra = "xpu" }, { index = "pytorch-cu121", extra = "cu121" }, ] pytorch-triton-xpu = [ { index = "pytorch-xpu", extra = "xpu", marker = "sys_platform == 'linux'" }, ] # now, define the index entries used above. [[tool.uv.index]] name = "pytorch-cpu" url = "https://download.pytorch.org/whl/cpu" explicit = true # only for the packages explicitly associated with the index [[tool.uv.index]] name = "pytorch-xpu" url = "https://download.pytorch.org/whl/xpu" explicit = true [[tool.uv.index]] name = "pytorch-cu121" url = "https://download.pytorch.org/whl/cu121" explicit = true
- Die Varianten liegen, wie bei Pytorch übrig, in einem eigenen Index. Für uv (uv-Doku zu Pytorch) kann man das z.B. so in der
-
-
def best_device(*models: torch.nn.Module) -> torch.device: force_cpu = os.environ.get("FORCE_CPU") if not force_cpu and torch.cuda.is_available(): device = torch.device("cuda") for model in models: model.cuda() elif not force_cpu and torch.xpu.is_available(): device = torch.device("xpu") for model in models: model.xpu() else: device = torch.device("cpu") for model in models: model.cpu() return device device = best_device(model) # ... some_tensor.to(device)
-
-
Created
March 14, 2025 18:29
-
-
Save thvitt/42ee55e3365aabc659056c6bdfe168e1 to your computer and use it in GitHub Desktop.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment