I used the scripts/install.sh script from the repository to install TuFT, but since my server cannot access GitHub, the installation of uv failed:
# bash scripts/install.sh
============================================
TuFT Installer
Tenant-unified Fine-Tuning Server
============================================
==> Installing with full backend support (GPU, persistence, flash-attn)
==> Installing from PyPI
==> Detected platform: linux (x86_64)
==> Installing uv (Python package manager)...
curl: (60) SSL certificate problem: self-signed certificate in certificate chain
More details here: https://curl.se/docs/sslcerts.html
curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.
Afterwards, I manually installed uv using pip install uv, which succeeded. Then I ran bash scripts/install.sh again, but encountered another failure when installing flash-attn:
...
==> TuFT installed successfully
==> Installing flash-attn from precompiled wheels...
wheel_url: https://dail-wlcb.oss-cn-wulanchabu.aliyuncs.com/AgentScope/download/flash-attn/2.8.1/flash_attn-2.8.1%2Bcu12torch2.8cxx11abiTRUE-cp312-cp312-linux_x86_64.whl
target_local_file: flash_attn-2.8.1-cp312-cp312-linux_x86_64.whl
--2026-02-02 13:44:16-- https://dail-wlcb.oss-cn-wulanchabu.aliyuncs.com/AgentScope/download/flash-attn/2.8.1/flash_attn-2.8.1%2Bcu12torch2.8cxx11abiTRUE-cp312-cp312-linux_x86_64.whl
Resolving dail-wlcb.oss-cn-wulanchabu.aliyuncs.com (dail-wlcb.oss-cn-wulanchabu.aliyuncs.com)... 39.101.41.132
Connecting to dail-wlcb.oss-cn-wulanchabu.aliyuncs.com (dail-wlcb.oss-cn-wulanchabu.aliyuncs.com)|39.101.41.132|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 126139464 (120M) [application/octet-stream]
Saving to: ‘/tmp/flash_attn-2.8.1-cp312-cp312-linux_x86_64.whl’
/tmp/flash_attn-2.8.1-cp312-cp312-linux_x86_64.whl 100%[=======================================================================================================================================================================>] 120.30M 165MB/s in 0.7s
2026-02-02 13:44:16 (165 MB/s) - ‘/tmp/flash_attn-2.8.1-cp312-cp312-linux_x86_64.whl’ saved [126139464/126139464]
warning: The `extra-build-dependencies` option is experimental and may change without warning. Pass `--preview-features extra-build-dependencies` to disable this warning.
error: No virtual environment found; run `uv venv` to create an environment, or pass `--system` to install into a non-virtual environment
Traceback (most recent call last):
File "/root/.tuft/scripts/install_flash_attn.py", line 63, in <module>
subprocess.run(["uv", "pip", "install", local_path], check=True)
File "/usr/lib/python3.12/subprocess.py", line 571, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['uv', 'pip', 'install', '/tmp/flash_attn-2.8.1-cp312-cp312-linux_x86_64.whl']' returned non-zero exit status 2.
Warning: flash-attn installation failed. This is optional, so installation will continue.
==> Creating tuft command wrapper...
==> Wrapper script created at /root/.tuft/bin/tuft
...
Upon inspection, I found that the uv command was missing from ~/.tuft/venv/, which caused the flash-attn installation to fail.
I used the
scripts/install.shscript from the repository to install TuFT, but since my server cannot access GitHub, the installation ofuvfailed:Afterwards, I manually installed
uvusingpip install uv, which succeeded. Then I ranbash scripts/install.shagain, but encountered another failure when installingflash-attn:Upon inspection, I found that the
uvcommand was missing from~/.tuft/venv/, which caused theflash-attninstallation to fail.