diff --git a/.github/workflows/basic-tests-linux-uv.yml b/.github/workflows/basic-tests-linux-uv.yml index 6fd292a..4b43190 100644 --- a/.github/workflows/basic-tests-linux-uv.yml +++ b/.github/workflows/basic-tests-linux-uv.yml @@ -33,14 +33,13 @@ jobs: - name: Set up Python (uv) uses: actions/setup-python@v5 with: - python-version: "3.11" + python-version: "3.13" - name: Install uv and dependencies shell: bash run: | curl -LsSf https://astral.sh/uv/install.sh | sh - uv python install 3.11 - uv add . --dev + uv sync --dev --python=3.10 # tests for backwards compatibility uv pip install -r ch05/07_gpt_to_llama/tests/test-requirements-extra.txt uv add pytest-ruff nbval diff --git a/.github/workflows/basic-tests-macos-uv.yml b/.github/workflows/basic-tests-macos-uv.yml index ecbb6c9..e4cbf42 100644 --- a/.github/workflows/basic-tests-macos-uv.yml +++ b/.github/workflows/basic-tests-macos-uv.yml @@ -33,14 +33,13 @@ jobs: - name: Set up Python (uv) uses: actions/setup-python@v5 with: - python-version: "3.11" + python-version: "3.13" - name: Install uv and dependencies shell: bash run: | curl -LsSf https://astral.sh/uv/install.sh | sh - uv python install 3.11 - uv add . --dev + uv sync --dev --python=3.10 # tests for backwards compatibility uv pip install -r ch05/07_gpt_to_llama/tests/test-requirements-extra.txt uv add pytest-ruff nbval diff --git a/.github/workflows/basic-tests-old-pytorch.yml b/.github/workflows/basic-tests-old-pytorch.yml index 116db3c..0bb0ac0 100644 --- a/.github/workflows/basic-tests-old-pytorch.yml +++ b/.github/workflows/basic-tests-old-pytorch.yml @@ -31,13 +31,12 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: "3.11" + python-version: "3.13" - name: Install dependencies run: | curl -LsSf https://astral.sh/uv/install.sh | sh - uv python install 3.11 - uv add . --dev + uv sync --dev --python=3.10 # tests for backwards compatibility uv pip install -r ch05/07_gpt_to_llama/tests/test-requirements-extra.txt uv add torch==${{ matrix.pytorch-version }} uv add pytest-ruff nbval diff --git a/.github/workflows/basic-tests-pip.yml b/.github/workflows/basic-tests-pip.yml index 504690f..01784d4 100644 --- a/.github/workflows/basic-tests-pip.yml +++ b/.github/workflows/basic-tests-pip.yml @@ -33,7 +33,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: "3.11" + python-version: "3.10" # tests for backwards compatibility - name: Create Virtual Environment and Install Dependencies run: | diff --git a/.github/workflows/basic-tests-pytorch-rc.yml b/.github/workflows/basic-tests-pytorch-rc.yml index 742bb23..4e8da01 100644 --- a/.github/workflows/basic-tests-pytorch-rc.yml +++ b/.github/workflows/basic-tests-pytorch-rc.yml @@ -27,13 +27,12 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: "3.11" + python-version: "3.13" - name: Install dependencies run: | curl -LsSf https://astral.sh/uv/install.sh | sh - uv python install 3.11 - uv add . --dev + uv sync --dev --python=3.10 # tests for backwards compatibility uv pip install -r ch05/07_gpt_to_llama/tests/test-requirements-extra.txt uv add pytest-ruff nbval uv pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cpu diff --git a/.github/workflows/basic-tests-windows-uv-pip.yml.disabled b/.github/workflows/basic-tests-windows-uv-pip.yml.disabled new file mode 100644 index 0000000..4aa7bc5 --- /dev/null +++ b/.github/workflows/basic-tests-windows-uv-pip.yml.disabled @@ -0,0 +1,66 @@ +name: Code tests Windows (uv/pip) + +on: + push: + branches: [ main ] + paths: + - '**/*.py' + - '**/*.ipynb' + - '**/*.yaml' + - '**/*.yml' + - '**/*.sh' + pull_request: + branches: [ main ] + paths: + - '**/*.py' + - '**/*.ipynb' + - '**/*.yaml' + - '**/*.yml' + - '**/*.sh' + +jobs: + test: + runs-on: windows-latest + + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.13" + + - name: Install dependencies + shell: pwsh + run: | + $env:Path = "C:\Users\runneradmin\.local\bin;$env:Path" + python -m pip install --upgrade pip + python -m pip install uv + uv venv --python=python3.11 + . .\.venv\Scripts\Activate.ps1 + $env:UV_PIP_OPTS="--no-binary tensorflow-io-gcs-filesystem" + uv pip install -r requirements.txt + uv pip install -r ch05/07_gpt_to_llama/tests/test-requirements-extra.txt + uv pip install pytest-ruff nbval + uv pip install --force-reinstall matplotlib "numpy<2.1" + + - name: Run Python Tests + shell: pwsh + run: | + $env:Path = "C:\Users\runneradmin\.local\bin;$env:Path" + . .\.venv\Scripts\Activate.ps1 + pytest --ruff setup/02_installing-python-libraries/tests.py + pytest --ruff ch04/01_main-chapter-code/tests.py + pytest --ruff ch05/01_main-chapter-code/tests.py + pytest --ruff ch05/07_gpt_to_llama/tests/tests.py + pytest --ruff ch06/01_main-chapter-code/tests.py + + - name: Run Jupyter Notebook Tests + shell: pwsh + run: | + $env:Path = "C:\Users\runneradmin\.local\bin;$env:Path" + . .\.venv\Scripts\Activate.ps1 + pytest --ruff --nbval ch02/01_main-chapter-code/dataloader.ipynb + pytest --ruff --nbval ch03/01_main-chapter-code/multihead-attention.ipynb + pytest --ruff --nbval ch02/04_bonus_dataloader-intuition/dataloader-intuition.ipynb diff --git a/.github/workflows/basic-tests-windows-uv.yml.disabled b/.github/workflows/basic-tests-windows-uv.yml.disabled new file mode 100644 index 0000000..306690a --- /dev/null +++ b/.github/workflows/basic-tests-windows-uv.yml.disabled @@ -0,0 +1,63 @@ +name: Code tests Windows (uv) + +on: + push: + branches: [ main ] + paths: + - '**/*.py' + - '**/*.ipynb' + - '**/*.yaml' + - '**/*.yml' + - '**/*.sh' + pull_request: + branches: [ main ] + paths: + - '**/*.py' + - '**/*.ipynb' + - '**/*.yaml' + - '**/*.yml' + - '**/*.sh' + +jobs: + test: + runs-on: windows-latest + + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.13" + + - name: Install dependencies + shell: pwsh + run: | + # Prepend local bin directory to PATH + powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" + $env:Path = "C:\Users\runneradmin\.local\bin;$env:Path" + uv sync --dev --python=3.10 + $env:UV_PIP_OPTS="--no-binary tensorflow-io-gcs-filesystem" + uv pip install -r requirements.txt + uv pip install matplotlib # for some reason Windows requires this + uv pip install -r ch05/07_gpt_to_llama/tests/test-requirements-extra.txt + uv add pytest-ruff nbval + + - name: Run Python Tests + shell: pwsh + run: | + . .\.venv\Scripts\Activate.ps1 + pytest --ruff setup/02_installing-python-libraries/tests.py + pytest --ruff ch04/01_main-chapter-code/tests.py + pytest --ruff ch05/01_main-chapter-code/tests.py + pytest --ruff ch05/07_gpt_to_llama/tests/tests.py + pytest --ruff ch06/01_main-chapter-code/tests.py + + - name: Run Jupyter Notebook Tests + shell: pwsh + run: | + . .\.venv\Scripts\Activate.ps1 + pytest --ruff --nbval ch02/01_main-chapter-code/dataloader.ipynb + pytest --ruff --nbval ch03/01_main-chapter-code/multihead-attention.ipynb + pytest --ruff --nbval ch02/04_bonus_dataloader-intuition/dataloader-intuition.ipynb diff --git a/.github/workflows/check-links.yml b/.github/workflows/check-links.yml index 52e41d6..1764532 100644 --- a/.github/workflows/check-links.yml +++ b/.github/workflows/check-links.yml @@ -18,13 +18,11 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.11' + python-version: "3.10" - name: Install dependencies run: | curl -LsSf https://astral.sh/uv/install.sh | sh - uv python install 3.11 - uv add . --dev uv add pytest-ruff pytest-check-links # Current version of retry doesn't work well if there are broken non-URL links # pip install pytest pytest-check-links pytest-retry diff --git a/.github/workflows/check-spelling-errors.yml b/.github/workflows/check-spelling-errors.yml index d347a2e..0fe1949 100644 --- a/.github/workflows/check-spelling-errors.yml +++ b/.github/workflows/check-spelling-errors.yml @@ -18,13 +18,12 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.11' + python-version: "3.10" - name: Install codespell run: | curl -LsSf https://astral.sh/uv/install.sh | sh - uv python install 3.11 - uv add . --dev + uv sync --dev --python=3.10 uv add codespell - name: Run codespell diff --git a/.github/workflows/pep8-linter.yml b/.github/workflows/pep8-linter.yml index aa9de7f..8755fd7 100644 --- a/.github/workflows/pep8-linter.yml +++ b/.github/workflows/pep8-linter.yml @@ -14,12 +14,11 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: '3.11' + python-version: "3.13" - name: Install ruff (a faster flake 8 equivalent) run: | curl -LsSf https://astral.sh/uv/install.sh | sh - uv python install 3.11 - uv add . --dev + uv sync --dev --python=3.10 uv add ruff - name: Run ruff with exceptions diff --git a/pyproject.toml b/pyproject.toml index b57d4a2..2c0f3dd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,8 +9,7 @@ dependencies = [ "jupyterlab>=4.0", "tiktoken>=0.5.1", "matplotlib>=3.7.1", - "tensorflow>=2.18.0; sys_platform != \"win32\"", - "tensorflow-cpu>=2.18.0; sys_platform == \"win32\"", + "tensorflow>=2.18.0", "tqdm>=4.66.1", "numpy>=1.26,<2.1", "pandas>=2.2.1", diff --git a/requirements.txt b/requirements.txt index 60d486a..ca7d422 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,10 +1,9 @@ -torch >= 2.3.0 # all -jupyterlab >= 4.0 # all -tiktoken >= 0.5.1 # ch02; ch04; ch05 -matplotlib >= 3.7.1 # ch04; ch05 -tensorflow>=2.18.0; sys_platform != "win32" # ch05 (non-Windows) -tensorflow-cpu>=2.18.0; sys_platform == "win32" # ch05 (Windows) -tqdm >= 4.66.1 # ch05; ch07 -numpy >= 1.26, < 2.1 # dependency of several other libraries like torch and pandas -pandas >= 2.2.1 # ch06 -psutil >= 5.9.5 # ch07; already installed automatically as dependency of torch +torch >= 2.3.0 # all +jupyterlab >= 4.0 # all +tiktoken >= 0.5.1 # ch02; ch04; ch05 +matplotlib >= 3.7.1 # ch04; ch06; ch07 +tensorflow>=2.18.0 # ch05; ch06; ch07 +tqdm >= 4.66.1 # ch05; ch07 +numpy >= 1.26, < 2.1 # dependency of several other libraries like torch and pandas +pandas >= 2.2.1 # ch06 +psutil >= 5.9.5 # ch07; already installed automatically as dependency of torch diff --git a/setup/01_optional-python-setup-preferences/README.md b/setup/01_optional-python-setup-preferences/README.md index 0128a09..aa90546 100644 --- a/setup/01_optional-python-setup-preferences/README.md +++ b/setup/01_optional-python-setup-preferences/README.md @@ -50,7 +50,7 @@ If it returns 3.10 or newer, no further action is required.   > [!NOTE] -> I recommend installing a Python version that is at least 1-3 versions older than the most recent release to ensure PyTorch compatibility. For example, if the most recent version is Python 3.13, I recommend installing version 3.10, 3.11, or 3.12. +> I recommend installing a Python version that is at least 2 versions older than the most recent release to ensure PyTorch compatibility. For example, if the most recent version is Python 3.13, I recommend installing version 3.10 or 3.11. Otherwise, if Python is not installed or is an older version, you can install it for your operating system as described below. @@ -62,7 +62,7 @@ Otherwise, if Python is not installed or is an older version, you can install it ```bash sudo apt update -sudo apt install python3.11 python3.11-venv python3.11-dev +sudo apt install python3.10 python3.10-venv python3.10-dev ```
@@ -143,13 +143,13 @@ uv pip install packaging To install all required packages from a `requirements.txt` file (such as the one located at the top level of this GitHub repository) run the following command, assuming the file is in the same directory as your terminal session: ```bash -uv pip install -U -r requirements.txt +uv pip install -r requirements.txt ``` Alternatively, install the latest dependencies directly from the repository: ```bash -uv pip install -U -r https://raw.githubusercontent.com/rasbt/LLMs-from-scratch/refs/heads/main/requirements.txt +uv pip install -r https://raw.githubusercontent.com/rasbt/LLMs-from-scratch/refs/heads/main/requirements.txt ``` @@ -246,7 +246,7 @@ conda create -n LLMs python=3.10 new-env -> Many scientific computing libraries do not immediately support the newest version of Python. Therefore, when installing PyTorch, it's advisable to use a version of Python that is one to three releases older. For instance, if the latest version of Python is 3.13, using Python 3.10, 3.11, or 3.12 is recommended. +> Many scientific computing libraries do not immediately support the newest version of Python. Therefore, when installing PyTorch, it's advisable to use a version of Python that is one or two releases older. For instance, if the latest version of Python is 3.13, using Python 3.10 or 3.11 is recommended. Next, activate your new virtual environment (you have to do it every time you open a new terminal window or tab): diff --git a/setup/01_optional-python-setup-preferences/native-uv.md b/setup/01_optional-python-setup-preferences/native-uv.md index ea2acd0..6ea38e8 100644 --- a/setup/01_optional-python-setup-preferences/native-uv.md +++ b/setup/01_optional-python-setup-preferences/native-uv.md @@ -70,6 +70,8 @@ uv sync --dev --python 3.11 > If you have problems with the following commands above due to certain dependencies (for example, if you are using Windows), you can always fall back to regular pip: > `uv add pip` > `uv run python -m pip install -U -r requirements.txt` +> +> Since the TensorFo