git: 8f2823654667 - main - science/linux-ai-ml-env: Linux Python environment for running AI and ML stuff
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 28 Mar 2025 12:37:30 UTC
The branch main has been updated by arrowd:
URL: https://cgit.FreeBSD.org/ports/commit/?id=8f2823654667cc746695a83126e15c3172c6261d
commit 8f2823654667cc746695a83126e15c3172c6261d
Author: Alexey Donskov <voxnod@gmail.com>
AuthorDate: 2025-03-22 16:59:25 +0000
Commit: Gleb Popov <arrowd@FreeBSD.org>
CommitDate: 2025-03-28 12:37:25 +0000
science/linux-ai-ml-env: Linux Python environment for running AI and ML stuff
Sponsored by: Future Crew, LLC
Pull Request: https://github.com/freebsd/freebsd-ports/pull/361
---
science/Makefile | 1 +
science/linux-ai-ml-env/Makefile | 99 ++++++++++++++++++++++
science/linux-ai-ml-env/distinfo | 5 ++
science/linux-ai-ml-env/files/ai-ml-env-bash.in | 6 ++
science/linux-ai-ml-env/files/ai-ml-env-python.in | 4 +
.../patch-reinforcement__learning_actor__critic.py | 13 +++
.../patch-reinforcement__learning_reinforce.py | 12 +++
.../patch-time__sequence__prediction_train.py | 11 +++
.../files/patch-word__language__model_main.py | 11 +++
science/linux-ai-ml-env/files/redundant-items.txt | 41 +++++++++
science/linux-ai-ml-env/files/requirements.txt | 56 ++++++++++++
.../files/stable-diffusion-sample.py | 24 ++++++
science/linux-ai-ml-env/files/uvm_ioctl_override.c | 93 ++++++++++++++++++++
science/linux-ai-ml-env/pkg-descr | 5 ++
science/linux-ai-ml-env/pkg-message | 32 +++++++
science/linux-ai-ml-env/pkg-plist | 26 ++++++
16 files changed, 439 insertions(+)
diff --git a/science/Makefile b/science/Makefile
index ae3b09cb79e2..c35f2114c848 100644
--- a/science/Makefile
+++ b/science/Makefile
@@ -168,6 +168,7 @@
SUBDIR += libxc
SUBDIR += liggghts
SUBDIR += linearelasticity
+ SUBDIR += linux-ai-ml-env
SUBDIR += linux-zotero
SUBDIR += luscus
SUBDIR += m-aneos
diff --git a/science/linux-ai-ml-env/Makefile b/science/linux-ai-ml-env/Makefile
new file mode 100644
index 000000000000..4053a20d88c0
--- /dev/null
+++ b/science/linux-ai-ml-env/Makefile
@@ -0,0 +1,99 @@
+PORTNAME= ai-ml-env
+PORTVERSION= 1.0.0
+CATEGORIES= science linux
+MASTER_SITES= https://arrowd.name/
+PKGNAMEPREFIX= linux-
+DISTFILES= miniconda3.tar.gz
+DIST_SUBDIR= ${PORTNAME}
+
+MAINTAINER= voxnod@gmail.com
+COMMENT= Linux Python environment for running Stable Diffusion models and PyTorch CUDA examples
+
+ONLY_FOR_ARCHS= amd64
+
+LICENSE= MULTI
+LICENSE_NAME= Multiple licenses
+LICENSE_TEXT= The package contains multiple packages with different licenses
+LICENSE_PERMS= dist-mirror pkg-mirror auto-accept
+
+FETCH_DEPENDS= linux_base-rl9>=9.2:emulators/linux_base-rl9
+BUILD_DEPENDS= linux-rl9-devtools>=0:devel/linux-rl9-devtools
+RUN_DEPENDS= linux-nvidia-libs>=0:x11/linux-nvidia-libs \
+ linux-rl9-python${PYTHON_SUFFIX}>=0:lang/linux-rl9-python3 \
+ nvidia-driver>=0:x11/nvidia-driver
+
+USES= linux:rl9
+USE_LINUX_PREFIX= yes
+USE_GITHUB= nodefault
+GH_ACCOUNT= pytorch:examples
+GH_PROJECT= examples:examples
+GH_TAGNAME= 5dfeb46902baf444010f2f54bcf4dfbea109ae4d:examples
+
+WRKSRC= ${WRKSRC_examples}
+
+SUB_FILES= ai-ml-env-bash \
+ ai-ml-env-python
+SUB_LIST= LOCALBASE=${LOCALBASE} \
+ LINUXBASE=${LINUXBASE}
+
+PLIST_SUB+= PYTHON_SUFFIX=${PYTHON_SUFFIX} \
+ PYTHON_VER=${PYTHON_VER}
+
+CONDA_VERSION= py39_25.1.1-2
+CONDA_SCRIPT= Miniconda3-${CONDA_VERSION}-Linux-x86_64.sh
+PYTHON_SUFFIX= 39
+PYTHON_VER= 3.9
+DATA_DIR= ${LOCALBASE}/share/${PORTNAME}
+
+create-distfile:
+ ${MKDIR} ${DISTDIR}/${DIST_SUBDIR}
+ cd ${DISTDIR}/${DIST_SUBDIR} && \
+ fetch -a -v https://repo.anaconda.com/miniconda/${CONDA_SCRIPT}
+ @if [ ! -d "${DISTDIR}/${DIST_SUBDIR}/miniconda3/envs/pytorch" ]; then \
+ ${ECHO_MSG} "Miniconda environment 'pytorch' not found. Setting up..."; \
+ ${SETENV} HOME=${DISTDIR}/${DIST_SUBDIR} ${SH} ${DISTDIR}/${DIST_SUBDIR}/${CONDA_SCRIPT} -b -s; \
+ ${DISTDIR}/${DIST_SUBDIR}/miniconda3/bin/conda create --name pytorch python=${PYTHON_VER} -y; \
+ ${LINUXBASE}/bin/bash -c "source ${DISTDIR}/${DIST_SUBDIR}/miniconda3/etc/profile.d/conda.sh && \
+ conda activate pytorch && \
+ pip install -r ${FILESDIR}/requirements.txt"; \
+ fi
+ cd ${DISTDIR}/${DIST_SUBDIR} && \
+ tar -czf miniconda3.tar.gz miniconda3
+ ${MAKE} makesum
+
+do-build:
+ /compat/linux/bin/cc --sysroot=/compat/linux -m64 -std=c99 -Wall -ldl -fPIC -shared -o ${WRKDIR}/dummy-uvm.so ${FILESDIR}/uvm_ioctl_override.c
+
+do-install:
+ @${FIND} ${WRKSRC} -name '*.orig' -delete
+ # Install Linux Python packages
+ ${MKDIR} ${STAGEDIR}${PREFIX}/usr/bin
+ ${FIND} ${WRKDIR}/miniconda3/envs/pytorch/bin -type f -exec ${CP} {} ${STAGEDIR}${PREFIX}/usr/bin \;
+ ${MKDIR} ${STAGEDIR}${PREFIX}/usr/lib/python${PYTHON_VER}
+ ${CP} -r ${WRKDIR}/miniconda3/envs/pytorch/lib/python${PYTHON_VER}/site-packages ${STAGEDIR}${PREFIX}/usr/lib/python${PYTHON_VER}
+ for item in `cat ${FILESDIR}/redundant-items.txt`; do \
+ ${RM} -r ${STAGEDIR}${PREFIX}/usr/$$item; \
+ done
+ ${FIND} ${STAGEDIR}${PREFIX}/usr/bin -type f -exec ${REINPLACE_CMD} -i '' 's|^#!.*/miniconda3/envs/pytorch/bin/python|#!/bin/python3|' {} +
+ # Install Shkhln's lib
+ ${MKDIR} ${STAGEDIR}${DATADIR}
+ ${INSTALL_LIB} ${WRKDIR}/dummy-uvm.so ${STAGEDIR}${DATADIR}
+ # Install Pytorch examples
+ ${MKDIR} ${STAGEDIR}${DATA_DIR}/pytorch-examples
+ cd ${WRKSRC} && \
+ ${COPYTREE_SHARE} . ${STAGEDIR}${DATA_DIR}/pytorch-examples
+ ${RM} -r ${STAGEDIR}${DATA_DIR}/pytorch-examples/.github
+ ${INSTALL_SCRIPT} ${WRKSRC}/run_python_examples.sh ${STAGEDIR}${DATA_DIR}/pytorch-examples
+ # Install Stable Diffusion sample
+ ${INSTALL_DATA} ${FILESDIR}/stable-diffusion-sample.py ${STAGEDIR}${DATA_DIR}
+ # Install demonstration scripts
+ ${MKDIR} ${STAGEDIR}${LOCALBASE}/bin
+ ${INSTALL_SCRIPT} ${WRKDIR}/ai-ml-env-bash ${STAGEDIR}${LOCALBASE}/bin/ai-ml-env-bash
+ ${INSTALL_SCRIPT} ${WRKDIR}/ai-ml-env-python ${STAGEDIR}${LOCALBASE}/bin/ai-ml-env-python
+
+post-install:
+ @${FIND} ${STAGEDIR}${PREFIX}/usr/lib/python${PYTHON_VER} -type f | sed -e 's|${STAGEDIR}${PREFIX}/||' >> ${TMPPLIST}
+ @${FIND} ${STAGEDIR}${DATA_DIR}/pytorch-examples -type f | sed -e 's|${STAGEDIR}||' >> ${TMPPLIST}
+ @${FIND} ${STAGEDIR}${DATA_DIR} -type d | sed -e 's|${STAGEDIR}|@dir |' >> ${TMPPLIST}
+
+.include <bsd.port.mk>
diff --git a/science/linux-ai-ml-env/distinfo b/science/linux-ai-ml-env/distinfo
new file mode 100644
index 000000000000..eba6ad95a915
--- /dev/null
+++ b/science/linux-ai-ml-env/distinfo
@@ -0,0 +1,5 @@
+TIMESTAMP = 1742925172
+SHA256 (ai-ml-env/miniconda3.tar.gz) = 1d9eb42dd753f462f4ccd82ab7716561b90274eeaa45254fd50b879bb09537b7
+SIZE (ai-ml-env/miniconda3.tar.gz) = 3511877484
+SHA256 (ai-ml-env/pytorch-examples-5dfeb46902baf444010f2f54bcf4dfbea109ae4d_GH0.tar.gz) = a024b134dfd1edba649289e551a0cd85bd22424dd76df4303b280e20757a602c
+SIZE (ai-ml-env/pytorch-examples-5dfeb46902baf444010f2f54bcf4dfbea109ae4d_GH0.tar.gz) = 7298483
diff --git a/science/linux-ai-ml-env/files/ai-ml-env-bash.in b/science/linux-ai-ml-env/files/ai-ml-env-bash.in
new file mode 100644
index 000000000000..cae2b877705b
--- /dev/null
+++ b/science/linux-ai-ml-env/files/ai-ml-env-bash.in
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+export LD_PRELOAD=%%LINUXBASE%%/usr/share/ai-ml-env/dummy-uvm.so
+export SSL_CERT_FILE=%%LINUXBASE%%/usr/lib/python3.9/site-packages/certifi/cacert.pem
+
+exec %%LINUXBASE%%/usr/bin/bash $*
diff --git a/science/linux-ai-ml-env/files/ai-ml-env-python.in b/science/linux-ai-ml-env/files/ai-ml-env-python.in
new file mode 100644
index 000000000000..335e571b2259
--- /dev/null
+++ b/science/linux-ai-ml-env/files/ai-ml-env-python.in
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+export LD_PRELOAD=%%DATADIR%%/dummy-uvm.so
+exec %%LINUXBASE%%/bin/python3 $*
diff --git a/science/linux-ai-ml-env/files/patch-reinforcement__learning_actor__critic.py b/science/linux-ai-ml-env/files/patch-reinforcement__learning_actor__critic.py
new file mode 100644
index 000000000000..64277c95cea6
--- /dev/null
+++ b/science/linux-ai-ml-env/files/patch-reinforcement__learning_actor__critic.py
@@ -0,0 +1,13 @@
+--- reinforcement_learning/actor_critic.py.orig 2025-02-09 16:56:58 UTC
++++ reinforcement_learning/actor_critic.py
+@@ -10,6 +10,10 @@ from torch.distributions import Categorical
+ import torch.optim as optim
+ from torch.distributions import Categorical
+
++# numpy.bool8 is deprecated since version 1.24.0
++if not hasattr(np, 'bool8'):
++ np.bool8 = np.bool_
++
+ # Cart Pole
+
+ parser = argparse.ArgumentParser(description='PyTorch actor-critic example')
diff --git a/science/linux-ai-ml-env/files/patch-reinforcement__learning_reinforce.py b/science/linux-ai-ml-env/files/patch-reinforcement__learning_reinforce.py
new file mode 100644
index 000000000000..9f1ab1540931
--- /dev/null
+++ b/science/linux-ai-ml-env/files/patch-reinforcement__learning_reinforce.py
@@ -0,0 +1,12 @@
+--- reinforcement_learning/reinforce.py.orig 2025-02-09 16:56:58 UTC
++++ reinforcement_learning/reinforce.py
+@@ -9,6 +9,9 @@ from torch.distributions import Categorical
+ import torch.optim as optim
+ from torch.distributions import Categorical
+
++# numpy.bool8 is deprecated since version 1.24.0
++if not hasattr(np, 'bool8'):
++ np.bool8 = np.bool_
+
+ parser = argparse.ArgumentParser(description='PyTorch REINFORCE example')
+ parser.add_argument('--gamma', type=float, default=0.99, metavar='G',
diff --git a/science/linux-ai-ml-env/files/patch-time__sequence__prediction_train.py b/science/linux-ai-ml-env/files/patch-time__sequence__prediction_train.py
new file mode 100644
index 000000000000..66a1b46c198b
--- /dev/null
+++ b/science/linux-ai-ml-env/files/patch-time__sequence__prediction_train.py
@@ -0,0 +1,11 @@
+--- time_sequence_prediction/train.py.orig 2025-02-09 16:56:58 UTC
++++ time_sequence_prediction/train.py
+@@ -44,7 +44,7 @@ if __name__ == '__main__':
+ np.random.seed(0)
+ torch.manual_seed(0)
+ # load data and make training set
+- data = torch.load('traindata.pt')
++ data = torch.load('traindata.pt', weights_only=False)
+ input = torch.from_numpy(data[3:, :-1])
+ target = torch.from_numpy(data[3:, 1:])
+ test_input = torch.from_numpy(data[:3, :-1])
diff --git a/science/linux-ai-ml-env/files/patch-word__language__model_main.py b/science/linux-ai-ml-env/files/patch-word__language__model_main.py
new file mode 100644
index 000000000000..549b2f3b8b8b
--- /dev/null
+++ b/science/linux-ai-ml-env/files/patch-word__language__model_main.py
@@ -0,0 +1,11 @@
+--- word_language_model/main.py.orig 2025-03-17 17:25:58 UTC
++++ word_language_model/main.py
+@@ -243,7 +243,7 @@ with open(args.save, 'rb') as f:
+
+ # Load the best saved model.
+ with open(args.save, 'rb') as f:
+- model = torch.load(f)
++ model = torch.load(f, weights_only=False)
+ # after load the rnn params are not a continuous chunk of memory
+ # this makes them a continuous chunk, and will speed up forward pass
+ # Currently, only rnn model supports flatten_parameters function.
diff --git a/science/linux-ai-ml-env/files/redundant-items.txt b/science/linux-ai-ml-env/files/redundant-items.txt
new file mode 100644
index 000000000000..54795ebaf9d0
--- /dev/null
+++ b/science/linux-ai-ml-env/files/redundant-items.txt
@@ -0,0 +1,41 @@
+bin/2to3-3.9
+bin/c_rehash
+bin/clear
+bin/idle3.9
+bin/infocmp
+bin/lzmadec
+bin/lzmainfo
+bin/ncursesw6-config
+bin/openssl
+bin/pip
+bin/pip3
+bin/pydoc3.9
+bin/python3.9
+bin/python3.9-config
+bin/sqlite3
+bin/sqlite3_analyzer
+bin/tabs
+bin/tclsh8.6
+bin/tic
+bin/toe
+bin/tput
+bin/tset
+bin/wheel
+bin/wish8.6
+bin/x86_64-conda-linux-gnu-ld
+bin/xz
+bin/xzdec
+bin/xzdiff
+bin/xzgrep
+bin/xzless
+bin/xzmore
+lib/python3.9/site-packages/_distutils_hack/
+lib/python3.9/site-packages/distutils-precedence.pth
+lib/python3.9/site-packages/pip-25.0.dist-info/
+lib/python3.9/site-packages/pip/
+lib/python3.9/site-packages/pkg_resources/
+lib/python3.9/site-packages/README.txt
+lib/python3.9/site-packages/setuptools-75.8.0-py3.9.egg-info/
+lib/python3.9/site-packages/setuptools/
+lib/python3.9/site-packages/wheel-0.45.1.dist-info/
+lib/python3.9/site-packages/wheel/
diff --git a/science/linux-ai-ml-env/files/requirements.txt b/science/linux-ai-ml-env/files/requirements.txt
new file mode 100644
index 000000000000..89aaddb5a303
--- /dev/null
+++ b/science/linux-ai-ml-env/files/requirements.txt
@@ -0,0 +1,56 @@
+accelerate==1.4.0
+certifi==2025.1.31
+charset-normalizer==3.4.1
+cloudpickle==3.1.1
+contourpy==1.3.0
+cycler==0.12.1
+diffusers==0.32.2
+filelock==3.17.0
+fonttools==4.56.0
+fsspec==2025.3.0
+gym==0.26.2
+gym-notices==0.0.8
+huggingface-hub==0.29.3
+idna==3.10
+importlib_metadata==8.6.1
+importlib_resources==6.5.2
+Jinja2==3.1.6
+kiwisolver==1.4.7
+MarkupSafe==3.0.2
+matplotlib==3.9.4
+mpmath==1.3.0
+networkx==3.2.1
+numpy==2.0.2
+nvidia-cublas-cu12==12.4.5.8
+nvidia-cuda-cupti-cu12==12.4.127
+nvidia-cuda-nvrtc-cu12==12.4.127
+nvidia-cuda-runtime-cu12==12.4.127
+nvidia-cudnn-cu12==9.1.0.70
+nvidia-cufft-cu12==11.2.1.3
+nvidia-curand-cu12==10.3.5.147
+nvidia-cusolver-cu12==11.6.1.9
+nvidia-cusparse-cu12==12.3.1.170
+nvidia-cusparselt-cu12==0.6.2
+nvidia-nccl-cu12==2.21.5
+nvidia-nvjitlink-cu12==12.4.127
+nvidia-nvtx-cu12==12.4.127
+packaging==24.2
+pillow==11.1.0
+psutil==7.0.0
+pyparsing==3.2.1
+python-dateutil==2.9.0.post0
+PyYAML==6.0.2
+regex==2024.11.6
+requests==2.32.3
+safetensors==0.5.3
+six==1.17.0
+sympy==1.13.1
+tokenizers==0.21.0
+torch==2.6.0
+torchvision==0.21.0
+tqdm==4.67.1
+transformers==4.49.0
+triton==3.2.0
+typing_extensions==4.12.2
+urllib3==2.3.0
+zipp==3.21.0
diff --git a/science/linux-ai-ml-env/files/stable-diffusion-sample.py b/science/linux-ai-ml-env/files/stable-diffusion-sample.py
new file mode 100644
index 000000000000..fae3f3af4513
--- /dev/null
+++ b/science/linux-ai-ml-env/files/stable-diffusion-sample.py
@@ -0,0 +1,24 @@
+import sys
+import torch
+from diffusers import StableDiffusionPipeline
+
+model_id = "CompVis/stable-diffusion-v1-4"
+device = "cuda" if torch.cuda.is_available() else "cpu"
+if device == "cpu":
+ print(
+ "CUDA is not available\n"
+ "Please ensure the following:\n"
+ "1. NVIDIA GPU is present in the system\n"
+ "2. NVIDIA Driver kernel module is loaded\n"
+ "3. dummy-uvm library is preloaded"
+ )
+ sys.exit(1)
+
+pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16)
+pipe = pipe.to(device)
+
+prompt = "a photo of an astronaut riding a horse on mars"
+image = pipe(prompt).images[0]
+
+image.save("astronaut_rides_horse.png")
+print(f"Image saved to astronaut_rides_horse.png")
diff --git a/science/linux-ai-ml-env/files/uvm_ioctl_override.c b/science/linux-ai-ml-env/files/uvm_ioctl_override.c
new file mode 100644
index 000000000000..843c8df762af
--- /dev/null
+++ b/science/linux-ai-ml-env/files/uvm_ioctl_override.c
@@ -0,0 +1,93 @@
+// Downloaded from https://gist.github.com/shkhln/40ef290463e78fb2b0000c60f4ad797e
+
+#define _GNU_SOURCE
+
+#include <assert.h>
+#include <dlfcn.h>
+#include <fcntl.h>
+#include <string.h>
+#include <stdarg.h>
+#include <stdint.h>
+#include <stdio.h>
+
+// pkg install linux-c7-devtools
+// /compat/linux/bin/cc --sysroot=/compat/linux -m64 -std=c99 -Wall -ldl -fPIC -shared -o dummy-uvm.so uvm_ioctl_override.c
+// env LD_PRELOAD=$PWD/dummy-uvm.so <cmd>
+
+#define NV_UVM_INITIALIZE 0x30000001
+#define NV_UVM_DEINITIALIZE 0x30000002
+
+#define NV_ERR_NOT_SUPPORTED 0x56
+
+struct NvUvmInitParams
+{
+ uint64_t flags __attribute__((aligned(8)));
+ uint32_t status;
+};
+
+int (*libc_ioctl)(int fd, unsigned long request, ...) = NULL;
+
+int ioctl(int fd, unsigned long request, ...) {
+
+ if (!libc_ioctl) {
+ libc_ioctl = dlsym(RTLD_NEXT, "ioctl");
+ }
+
+ va_list _args_;
+ va_start(_args_, request);
+ void* data = va_arg(_args_, void*);
+ va_end(_args_);
+
+ if (request == NV_UVM_INITIALIZE) {
+ struct NvUvmInitParams* params = (struct NvUvmInitParams*)data;
+ params->status = NV_ERR_NOT_SUPPORTED;
+ return 0;
+ }
+
+ if (request == NV_UVM_DEINITIALIZE) {
+ return 0;
+ }
+
+ return libc_ioctl(fd, request, data);
+}
+
+int (*libc_open)(const char* path, int flags, ...) = NULL;
+
+int open(const char* path, int flags, ...) {
+
+ if (!libc_open) { libc_open = dlsym(RTLD_NEXT, "open"); }
+
+ mode_t mode = 0;
+
+ va_list _args_;
+ va_start(_args_, flags);
+
+ if (flags & O_CREAT) {
+ mode = va_arg(_args_, int);
+ }
+
+ va_end(_args_);
+
+ if (strcmp("/dev/nvidia-uvm", path) == 0) {
+ return libc_open("/dev/null", flags, mode);
+ }
+
+ return libc_open(path, flags, mode);
+}
+
+FILE* (*libc_fopen)(const char* path, const char* mode) = NULL;
+
+FILE* fopen(const char* path, const char* mode) {
+
+ if (!libc_fopen) { libc_fopen = dlsym(RTLD_NEXT, "fopen"); }
+
+ if (strncmp(path, "/proc/self/task/", sizeof("/proc/self/task/") - 1) == 0) {
+ char* tail = strchr(path + sizeof("/proc/self/task/"), '/');
+ if (tail != NULL && strcmp(tail, "/comm") == 0) {
+ assert(strcmp(mode, "wb") == 0);
+ return libc_fopen("/dev/null", mode);
+ }
+ }
+
+ return libc_fopen(path, mode);
+}
diff --git a/science/linux-ai-ml-env/pkg-descr b/science/linux-ai-ml-env/pkg-descr
new file mode 100644
index 000000000000..03dda5eb0c42
--- /dev/null
+++ b/science/linux-ai-ml-env/pkg-descr
@@ -0,0 +1,5 @@
+This port provides a Linux Python environment tailored for running Stable Diffusion models on NVIDIA GPUs. It includes:
+
+- A preconfigured Python environment with dependencies for Stable Diffusion and PyTorch examples.
+- PyTorch examples.
+- Sample scripts for running Stable Diffusion model and PyTorch examples.
diff --git a/science/linux-ai-ml-env/pkg-message b/science/linux-ai-ml-env/pkg-message
new file mode 100644
index 000000000000..4c744748c5c5
--- /dev/null
+++ b/science/linux-ai-ml-env/pkg-message
@@ -0,0 +1,32 @@
+[
+{ type: install
+ message: <<EOM
+To utilize CUDA support for PyTorch, both https://github.com/shkhln 's
+compatibility library preloading and Linux compatibility layer usage are
+required, as demonstrated in the provided demonstration scripts.
+
+To play with Stable Diffusion copy it to a user-writable directory, edit at will
+and launch it via ai-ml-env-python:
+
+ cp /usr/local/share/ai-ml-env/stable-diffusion-sample.py ~/
+ ai-ml-env-python stable-diffusion-sample.py
+
+This will download data packages into ~/.cache/huggingface/hub/ during the
+first-time run.
+
+The port also provides Pytorch examples from the official GitHub repository.
+To run and modify these examples, copy them to a user-writable directory
+and then launch the entry point script via ai-ml-env-bash:
+
+ cp -r /usr/local/share/ai-ml-env/pytorch-examples ~/pytorch-examples
+ cd ~/pytorch-examples && ai-ml-env-bash ./run_python_examples.sh
+
+You can then run
+
+ai-ml-env-bash ./run_python_examples.sh clean
+
+to remove downloaded data or just remove the whole directory to clean up
+everything.
+EOM
+}
+]
diff --git a/science/linux-ai-ml-env/pkg-plist b/science/linux-ai-ml-env/pkg-plist
new file mode 100644
index 000000000000..a0da7f0793eb
--- /dev/null
+++ b/science/linux-ai-ml-env/pkg-plist
@@ -0,0 +1,26 @@
+usr/bin/accelerate
+usr/bin/accelerate-config
+usr/bin/accelerate-estimate-memory
+usr/bin/accelerate-launch
+usr/bin/accelerate-merge-weights
+usr/bin/diffusers-cli
+usr/bin/f2py
+usr/bin/fonttools
+usr/bin/huggingface-cli
+usr/bin/isympy
+usr/bin/normalizer
+usr/bin/numpy-config
+usr/bin/proton
+usr/bin/proton-viewer
+usr/bin/pyftmerge
+usr/bin/pyftsubset
+usr/bin/torchfrtrace
+usr/bin/torchrun
+usr/bin/tqdm
+usr/bin/transformers-cli
+usr/bin/ttx
+%%DATADIR%%/dummy-uvm.so
+/usr/local/bin/ai-ml-env-bash
+/usr/local/bin/ai-ml-env-python
+/usr/local/share/ai-ml-env/stable-diffusion-sample.py
+@dir /usr/local/bin