1
0
mirror of https://github.com/tiyn/wiki.git synced 2026-08-24 09:31:34 +02:00

Programming Languages/Python: Added tensorflow gpu fix

This commit is contained in:
2026-08-18 09:40:47 +02:00
parent 41cd91f173
commit ee3d5929bb
2 changed files with 121 additions and 1 deletions

View File

@@ -381,7 +381,7 @@ can be referenced.
### TensorFlow ### TensorFlow
This section addresses the [TensorFlow module](https://www.tensorflow.org/). This section addresses the [TensorFlow module](https://www.tensorflow.org/).
Tensorflos is a machine learning resource which is often used for TensorFlow is a machine learning resource which is often used for
[neural networks](/wiki/neural_network.md). [neural networks](/wiki/neural_network.md).
Apart from [package managers](/wiki/linux/package_manager.md) and Apart from [package managers](/wiki/linux/package_manager.md) and
@@ -390,6 +390,88 @@ on [the official website](https://www.tensorflow.org/install/source).
This may especially be useful if specific configurations are needed such as vendor specific GPU This may especially be useful if specific configurations are needed such as vendor specific GPU
support. support.
#### Setup TensorFlow with CUDA in a uv Project
TensorFlow can install its required CUDA user-space libraries as optional dependencies on Linux.
The NVIDIA driver still has to be installed on the host system.
```sh
nvidia-smi
uv add 'tensorflow[and-cuda]'
```
Verify whether TensorFlow was built with CUDA support and detects the GPU.
```sh
uv run python -c 'import tensorflow as tf; print("CUDA build:", tf.test.is_built_with_cuda()); print(tf.config.list_physical_devices("GPU"))'
```
If `CUDA build` is `True` but no GPU is listed and TensorFlow reports that it cannot load GPU
libraries, the dynamic linker may not find the NVIDIA libraries installed inside the virtual
environment.
The following command temporarily adds all library directories from the installed `nvidia-*`
packages.
```sh
SITE_PACKAGES=$(uv run python -c 'import site; print(site.getsitepackages()[0])')
CUDA_LIBS=$(find "$SITE_PACKAGES/nvidia" -type d -name lib -printf '%p:')
LD_LIBRARY_PATH="${CUDA_LIBS}/usr/lib" uv run python -c \
'import tensorflow as tf; print(tf.config.list_physical_devices("GPU"))'
```
If the test succeeds, store the path in a machine-specific dotenv file.
```sh
printf 'LD_LIBRARY_PATH=%s/usr/lib\n' "$CUDA_LIBS" > .env.cuda
printf '.env.cuda\n' >> .gitignore
```
Run the project with the file explicitly.
```sh
uv run --env-file .env.cuda python <script>.py
```
To load it automatically, create a `.envrc` file and use
[direnv](https://direnv.net/).
```sh
printf 'export UV_ENV_FILE="$PWD/.env.cuda"\n' > .envrc
eval "$(direnv hook zsh)"
direnv allow
```
For more information about dotenv files in uv, refer to the
[uv environment variable section](/wiki/programming_language/python/uv.md#loading-environment-variables).
Some recent GPUs may require CUDA kernels to be compiled from PTX on the first run because the
TensorFlow wheel does not yet contain native kernel binaries for their compute capability.
For example, TensorFlow 2.21 reports this for an RTX 5060 Ti with compute capability `12.0a`.
According to NVIDIA's
[explanation of PTX compatibility](https://developer.nvidia.com/blog/understanding-ptx-the-assembly-language-of-cuda-gpu-computing/),
embedded PTX can be compiled for newer GPU generations at runtime.
The first start can therefore take considerably longer, while the resulting binary is normally
cached for subsequent runs.
Make sure the `ptxas` executable installed by the CUDA dependency is available in the virtual
environment.
```sh
VENV_DIR=$(uv run python -c 'import sys; print(sys.prefix)')
PTXAS=$(find "$VENV_DIR" -type f -name ptxas -print -quit)
ln -sf "$PTXAS" "$VENV_DIR/bin/ptxas"
```
The library lookup problem is not caused by the GPU being new; it is an environment configuration
issue.
The new GPU generation only explains why TensorFlow falls back to PTX JIT compilation after the
libraries have been found.
Refer to the
[official TensorFlow installation guide](https://www.tensorflow.org/install/pip) for the current
CUDA installation and troubleshooting steps.
#### Basic Usage of TensorFlow #### Basic Usage of TensorFlow
The basic usage of TensorFlow is described in The basic usage of TensorFlow is described in

View File

@@ -113,6 +113,44 @@ desired package.
uv add <package> uv add <package>
``` ```
### Loading Environment Variables
[`uv run`](https://docs.astral.sh/uv/concepts/configuration-files/#environment-variable-files) can
load environment variables from dotenv files.
Use `--env-file` to load a file for one command.
```sh
uv run --env-file .env.local python <script>.py
```
Alternatively, set `UV_ENV_FILE` to use the same file for subsequent `uv run` commands in the
current shell.
```sh
export UV_ENV_FILE="$PWD/.env.local"
uv run python <script>.py
```
For project-local automation, [direnv](https://direnv.net/) can set `UV_ENV_FILE` whenever the
project directory is entered.
Create `.envrc` in the project root with the following content.
```sh
export UV_ENV_FILE="$PWD/.env.local"
```
Enable the shell hook, then approve the file.
The example uses Zsh.
```sh
eval "$(direnv hook zsh)"
direnv allow
```
The shell hook should be added to `~/.zshrc` to enable it in new shells.
`direnv allow` always expects a `.envrc`; it does not load `.env.local` directly.
Machine-specific dotenv files should usually be added to `.gitignore`.
### Installing CLI Tools ### Installing CLI Tools
Besides managing projects and virtual environments, `uv` can also install Besides managing projects and virtual environments, `uv` can also install