Compare commits

..
Author SHA1 Message Date
Woze Parrot 01848d1e17 feat: results 2026-05-11 17:56:29 +00:00
Woze Parrot 9938b5da8b feat: training 6.0 2026-05-11 16:22:47 +00:00
686 changed files with 26081 additions and 78897 deletions
@@ -5,7 +5,6 @@ runs:
steps:
- name: Run process replay tests
shell: bash
if: env.CAPTURE_PROCESS_REPLAY == '1'
run: |
export PR_TITLE=$(jq -r .pull_request.title "$GITHUB_EVENT_PATH")
export CURRENT_SHA=${{ github.event.pull_request && github.event.pull_request.head.sha || github.sha }}
+125 -83
View File
@@ -4,13 +4,13 @@ inputs:
python-version:
description: 'Python version to use'
required: false
default: '' # if you don't set a version, the native python version will be used
default: '3.12'
key:
description: 'Key for the python cache'
required: false
default: '' # if you don't set a key, it doesn't cache
deps:
description: 'Extra dependency groups (space separated)'
description: 'Extra dependency groups (comma separated)'
required: false
default: ''
pydeps:
@@ -41,33 +41,20 @@ inputs:
description: "Install LLVM?"
required: false
default: 'false'
tinydreno:
description: "Install tinydreno"
mesa:
description: "Install mesa"
required: false
default: 'false'
qemu:
description: "Install qemu"
tinydreno:
description: "Install tinydreno"
required: false
default: 'false'
runs:
using: "composite"
steps:
- name: Setup environment
shell: bash
run: |
echo "UV_CACHE_DIR=/tmp/.uv-cache" >> "$GITHUB_ENV"
echo "OMP_NUM_THREADS=1" >> "$GITHUB_ENV"
# no buffers should be over 300MB in CI
echo "MAX_BUFFER_SIZE=300000000" >> "$GITHUB_ENV"
- name: Set up uv
uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b
with:
enable-cache: 'false' # see below for manual caching
- name: Set up Python ${{ inputs.python-version }}
id: setup-python
uses: actions/setup-python@v6
if: inputs.python-version != ''
with:
python-version: ${{ inputs.python-version }}
@@ -76,23 +63,23 @@ runs:
- name: Cache Python packages (PR)
if: github.event_name == 'pull_request'
id: restore-venv-pr
uses: actions/cache/restore@v5
uses: actions/cache/restore@v4
with:
path: /tmp/.uv-cache
key: uv-${{ runner.os }}-${{ runner.arch }}-python-${{ inputs.python-version }}-${{ inputs.deps }}-${{ inputs.pydeps }}-${{ env.CACHE_VERSION }}
path: ${{ github.workspace }}/.venv
key: venv-${{ runner.os }}-${{ runner.arch }}-python-${{ steps.setup-python.outputs.python-version }}-${{ inputs.deps }}-${{ inputs.pydeps }}-${{ env.CACHE_VERSION }}
- name: Cache Python packages
if: github.event_name != 'pull_request'
id: restore-venv
uses: actions/cache@v5
with:
path: /tmp/.uv-cache
key: uv-${{ runner.os }}-${{ runner.arch }}-python-${{ inputs.python-version }}-${{ inputs.deps }}-${{ inputs.pydeps }}-${{ env.CACHE_VERSION }}
path: ${{ github.workspace }}/.venv
key: venv-${{ runner.os }}-${{ runner.arch }}-python-${{ steps.setup-python.outputs.python-version }}-${{ inputs.deps }}-${{ inputs.pydeps }}-${{ env.CACHE_VERSION }}
# **** Caching downloads ****
- name: Cache downloads (PR)
if: inputs.key != '' && github.event_name == 'pull_request'
uses: actions/cache/restore@v5
uses: actions/cache/restore@v4
with:
path: ${{ runner.os == 'Linux' && '~/.cache/tinygrad/downloads/' || '~/Library/Caches/tinygrad/downloads/' }}
key: downloads-${{ github.job }}-${{ inputs.key }}-${{ env.CACHE_VERSION }}
@@ -106,26 +93,34 @@ runs:
# **** Python deps ****
- name: Install dependencies in venv (with extra)
if: inputs.deps != ''
if: inputs.deps != '' && steps.restore-venv-pr.outputs.cache-hit != 'true' && steps.restore-venv.outputs.cache-hit != 'true'
shell: bash
run: |
uv venv .venv
DEPS="${{ inputs.deps }}"
uv pip install --python .venv -e ".[${DEPS// /,}]" ${{ inputs.pydeps }} --torch-backend cpu --extra-index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/Triton-Nightly/pypi/simple/
python -m venv .venv
if [[ "$RUNNER_OS" == "Windows" ]]; then
source .venv/Scripts/activate
else
. .venv/bin/activate
fi
python -m pip install -e ".[${{ inputs.deps }}]" ${{ inputs.pydeps }} --extra-index-url https://download.pytorch.org/whl/cpu --extra-index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/Triton-Nightly/pypi/simple/
- name: Install dependencies in venv (without extra)
if: inputs.deps == ''
if: inputs.deps == '' && steps.restore-venv-pr.outputs.cache-hit != 'true' && steps.restore-venv.outputs.cache-hit != 'true'
shell: bash
run: |
uv venv .venv
uv pip install --python .venv -e . ${{ inputs.pydeps }}
- name: Prune uv cache
if: github.event_name != 'pull_request'
shell: bash
run: uv cache prune --ci
- name: Configure venv
python -m venv .venv
if [[ "$RUNNER_OS" == "Windows" ]]; then
source .venv/Scripts/activate
else
. .venv/bin/activate
fi
python -m pip install -e . ${{ inputs.pydeps }}
- name: Set up venv environment
shell: bash
run: |
echo "VIRTUAL_ENV=${{ github.workspace }}/.venv" >> "$GITHUB_ENV"
echo "OMP_NUM_THREADS=1" >> "$GITHUB_ENV"
# no buffers should be over 300MB in CI
echo "MAX_BUFFER_SIZE=300000000" >> "$GITHUB_ENV"
if [[ "$RUNNER_OS" == "Windows" ]]; then
echo "${{ github.workspace }}/.venv/Scripts" >> "$GITHUB_PATH"
else
@@ -134,16 +129,20 @@ runs:
# ******************* apt *******************
- name: Setup apt
if: runner.os == 'Linux' && (inputs.opencl == 'true' || inputs.amd == 'true' || inputs.webgpu == 'true' || inputs.llvm == 'true' || inputs.qemu == 'true')
if: runner.os == 'Linux' && (inputs.opencl == 'true' || inputs.amd == 'true' || inputs.cuda == 'true' || inputs.webgpu == 'true' || inputs.llvm == 'true')
shell: bash
run: |
sudo mkdir -p /var/cache/apt/archives
sudo chown -R $USER:$USER /var/cache/apt/archives
echo 'Acquire::GzipIndexes "true";' | sudo tee /etc/apt/apt.conf.d/gzip
echo 'Acquire::http::Pipeline-Depth "5";' | sudo tee -a /etc/apt/apt.conf.d/99parallel
echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' | sudo tee -a /etc/apt/apt.conf.d/99keep-debs
- name: Add OpenCL Repo
if: inputs.opencl == 'true' && runner.os == 'Linux'
shell: bash
run: echo "deb [ allow-insecure=yes ] https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list
- name: Add AMD Repo (Linux)
if: inputs.amd == 'true' && runner.os == 'Linux'
shell: bash
@@ -162,50 +161,54 @@ runs:
echo "deb http://apt.llvm.org/$(lsb_release -cs)/ llvm-toolchain-$(lsb_release -cs)-20 main" | sudo tee /etc/apt/sources.list.d/llvm.list
- name: Compute Package List + Hash
if: runner.os == 'Linux' && (inputs.opencl == 'true' || inputs.amd == 'true' || inputs.webgpu == 'true' || inputs.llvm == 'true' || inputs.qemu == 'true')
if: runner.os == 'Linux' && (inputs.opencl == 'true' || inputs.amd == 'true' || inputs.cuda == 'true' || inputs.webgpu == 'true' || inputs.llvm == 'true')
id: apt-pkgs
shell: bash
run: |
pkgs=""
# **** OpenCL ****
if [[ "${{ inputs.opencl }}" == "true" ]]; then
pkgs+=" ocl-icd-opencl-dev"
pkgs+=" opencl-headers \
intel-oneapi-runtime-openmp=2023.2.1-16 intel-oneapi-runtime-compilers-common=2023.2.1-16 intel-oneapi-runtime-compilers=2023.2.1-16 \
intel-oneapi-runtime-dpcpp-sycl-opencl-cpu=2023.2.1-16 intel-oneapi-runtime-tbb-common=2021.10.0-49541 \
intel-oneapi-runtime-tbb=2021.10.0-49541 intel-oneapi-runtime-opencl=2023.2.1-16"
fi
# **** AMD ****
if [[ "${{ inputs.amd }}" == "true" ]]; then
pkgs+=" comgr"
pkgs+=" hsa-rocr comgr hsa-rocr-dev liburing-dev libibverbs-dev libc6-dev"
fi
# **** CUDA ****
if [[ "${{ inputs.cuda }}" == "true" ]]; then
pkgs+=" git g++ cmake ninja-build llvm-15-dev zlib1g-dev libglew-dev \
flex bison libfl-dev libboost-thread-dev libboost-filesystem-dev nvidia-cuda-toolkit-gcc libzstd-dev"
fi
# **** WebGPU (dependencies for software-based vulkan) ****
if [[ "${{ inputs.webgpu }}" == "true" ]]; then
pkgs+=" mesa-vulkan-drivers"
pkgs+=" libgl1 libglx-mesa0 libgl1-mesa-dri libxcb-xfixes0-dev mesa-vulkan-drivers"
fi
# **** LLVM ****
if [[ "${{ inputs.llvm }}" == "true" ]]; then
pkgs+=" libllvm20 clang-20 lld-20"
fi
# **** QEMU ****
if [[ "${{ inputs.qemu }}" == "true" ]]; then
pkgs+=" qemu-user-static"
fi
echo "pkgs=$pkgs" >> "$GITHUB_OUTPUT"
echo "hash=$(echo -n "$pkgs" | sha256sum | cut -d' ' -f1)" >> "$GITHUB_OUTPUT"
- name: Cache apt (PR)
if: runner.os == 'Linux' && (inputs.opencl == 'true' || inputs.amd == 'true' || inputs.webgpu == 'true' || inputs.llvm == 'true' || inputs.qemu == 'true') && github.event_name == 'pull_request'
uses: actions/cache/restore@v5
if: runner.os == 'Linux' && (inputs.opencl == 'true' || inputs.amd == 'true' || inputs.cuda == 'true' || inputs.webgpu == 'true' || inputs.llvm == 'true') && github.event_name == 'pull_request'
uses: actions/cache/restore@v4
with:
path: /var/cache/apt/archives/
key: ${{ runner.os }}-${{ runner.arch }}-apt-${{ steps.apt-pkgs.outputs.hash }}-${{ env.CACHE_VERSION }}
- name: Cache apt
if: runner.os == 'Linux' && (inputs.opencl == 'true' || inputs.amd == 'true' || inputs.webgpu == 'true' || inputs.llvm == 'true' || inputs.qemu == 'true') && github.event_name != 'pull_request'
if: runner.os == 'Linux' && (inputs.opencl == 'true' || inputs.amd == 'true' || inputs.cuda == 'true' || inputs.webgpu == 'true' || inputs.llvm == 'true') && github.event_name != 'pull_request'
uses: actions/cache@v5
with:
path: /var/cache/apt/archives/
key: ${{ runner.os }}-${{ runner.arch }}-apt-${{ steps.apt-pkgs.outputs.hash }}-${{ env.CACHE_VERSION }}
- name: Run apt Update + Install
if: runner.os == 'Linux' && (inputs.opencl == 'true' || inputs.amd == 'true' || inputs.webgpu == 'true' || inputs.llvm == 'true' || inputs.qemu == 'true')
if: runner.os == 'Linux' && (inputs.opencl == 'true' || inputs.amd == 'true' || inputs.cuda == 'true' || inputs.webgpu == 'true' || inputs.llvm == 'true')
shell: bash
run: |
sudo apt -qq update || true
@@ -215,14 +218,8 @@ runs:
sudo apt-get -y --allow-unauthenticated --no-install-recommends install ${{ steps.apt-pkgs.outputs.pkgs }}
fi
sudo mkdir -p /var/cache/apt/archives
sudo chown -R $USER:$USER /var/cache/apt/archives/
- name: Add clang to PATH (Linux)
if: inputs.llvm == 'true' && runner.os == 'Linux'
shell: bash
run: echo "/usr/lib/llvm-20/bin" >> "$GITHUB_PATH"
# **** AMD ****
- name: Setup AMD (Linux)
if: inputs.amd == 'true' && runner.os == 'Linux'
@@ -242,33 +239,78 @@ runs:
jq -r '.assets[] | select(.name == "libamd_comgr.dylib").browser_download_url' | \
sudo xargs curl -fL -o /usr/local/lib/libamd_comgr.dylib
# **** CUDA ****
- name: Install CUDA
if: inputs.cuda == 'true'
# **** gpuocelot ****
- name: Install gpuocelot dependencies (MacOS)
if: inputs.ocelot == 'true' && runner.os == 'macOS'
shell: bash
run: |
sudo mkdir -p /usr/local/cuda/targets/x86_64-linux
curl -fL https://developer.download.nvidia.com/compute/cuda/redist/cuda_nvrtc/linux-x86_64/cuda_nvrtc-linux-x86_64-11.5.119-archive.tar.xz \
| sudo tar -xJ -C /usr/local/cuda/targets/x86_64-linux --strip-components=1
echo /usr/local/cuda/targets/x86_64-linux/lib | sudo tee /etc/ld.so.conf.d/cuda-nvrtc.conf
sudo ldconfig
pkgs=(cmake ninja llvm@15 zlib glew flex bison [email protected] zstd ncurses)
for f in "${pkgs[@]}"; do
brew ls --versions "$f" >/dev/null 2>&1 || brew install --quiet "$f"
done
# **** gpuocelot ****
# Fix boost 1.85 for gpuocelot
ln -s /opt/homebrew/opt/[email protected] /opt/homebrew/opt/boost || true
ln -s /opt/homebrew/opt/boost/lib/libboost_atomic-mt.dylib /opt/homebrew/opt/boost/lib/libboost_atomic.dylib || true
ln -s /opt/homebrew/opt/boost/lib/libboost_thread-mt.dylib /opt/homebrew/opt/boost/lib/libboost_thread.dylib || true
- name: Cache gpuocelot (PR)
if: inputs.ocelot == 'true' && github.event_name == 'pull_request'
id: cache-build-pr
uses: actions/cache/restore@v4
env:
cache-name: cache-gpuocelot-build-1
with:
path: ${{ github.workspace }}/gpuocelot/ocelot
key: ${{ runner.os }}-gpuocelot-b16039dc940dc6bc4ea0a98380495769ff35ed99-rebuild-${{ env.CACHE_VERSION }}
- name: Cache gpuocelot
if: inputs.ocelot == 'true' && github.event_name != 'pull_request'
id: cache-build
uses: actions/cache@v5
env:
cache-name: cache-gpuocelot-build-1
with:
path: ${{ github.workspace }}/gpuocelot/ocelot
key: ${{ runner.os }}-gpuocelot-b16039dc940dc6bc4ea0a98380495769ff35ed99-rebuild-${{ env.CACHE_VERSION }}
- name: Clone/compile gpuocelot
if: inputs.ocelot == 'true' && steps.cache-build-pr.outputs.cache-hit != 'true' && steps.cache-build.outputs.cache-hit != 'true'
shell: bash
run: |
git clone --recurse-submodules https://github.com/gpuocelot/gpuocelot.git ${{ github.workspace }}/gpuocelot
cd ${{ github.workspace }}/gpuocelot/ocelot
git checkout b16039dc940dc6bc4ea0a98380495769ff35ed99
mkdir build
cd build
CMAKE_ARGS="-Wno-dev -G Ninja -DOCELOT_BUILD_TOOLS=OFF -DCMAKE_BUILD_ALWAYS=0 -DBUILD_TESTS_CUDA=OFF -DCMAKE_POLICY_VERSION_MINIMUM=3.5"
if [[ "${{ runner.os }}" == "macOS" ]]; then
sudo xcode-select -s /Applications/Xcode_16.2.app/Contents/Developer
CMAKE_ARGS="$CMAKE_ARGS -DBoost_INCLUDE_DIR=$(brew --prefix boost)/include -DBoost_LIBRARY_DIR=$(brew --prefix boost)/lib"
fi
cmake .. $CMAKE_ARGS
ninja
- name: Install gpuocelot
if: inputs.ocelot == 'true'
shell: bash
run: |
sudo mkdir -p /usr/local/lib
sudo curl --output-dir /usr/local/lib -fLO https://github.com/tinygrad/gpuocelot/releases/download/v0.1.0/libgpuocelot.${{ runner.os == 'Linux' && 'so' || 'dylib' }}
cd ${{ github.workspace }}/gpuocelot/ocelot/build
sudo cp libgpuocelot.${{ runner.os == 'macOS' && 'dylib' || 'so' }} /usr/${{ runner.os == 'macOS' && 'local/' || '' }}lib/
# **** WebGPU ****
- name: Install WebGPU dawn
if: inputs.webgpu == 'true'
- name: Install WebGPU dawn (Linux)
if: inputs.webgpu == 'true' && runner.os == 'Linux'
shell: bash
run: |
sudo mkdir -p /usr/local/lib
sudo curl --output-dir /usr/local/lib -fLO https://github.com/wpmed92/pydawn/releases/download/v0.1.6/libwebgpu_dawn.${{ runner.os == 'Linux' && 'so' || 'dylib' }}
sudo curl -fL https://github.com/wpmed92/pydawn/releases/download/v0.1.6/libwebgpu_dawn.so -o /usr/local/lib/libwebgpu_dawn.so
sudo ldconfig
- name: Install WebGPU dawn (macOS)
if: inputs.webgpu == 'true' && runner.os == 'macOS'
shell: bash
run: |
brew tap wpmed92/dawn
brew install dawn
# **** LLVM ****
@@ -277,18 +319,18 @@ runs:
shell: bash
run: brew install llvm@20
# **** mesa ****
- name: Install mesa (linux)
if: inputs.mesa == 'true' && runner.os == 'Linux'
shell: bash
run: sudo curl -fL https://github.com/sirhcm/tinymesa/releases/download/v1/libtinymesa_cpu-mesa-25.2.7-linux-amd64.so -o /usr/lib/libtinymesa_cpu.so
- name: Install mesa (macOS)
if: inputs.mesa == 'true' && runner.os == 'macOS'
shell: bash
run: brew install sirhcm/tinymesa/tinymesa_cpu
# *** tinydreno ***
- name: Install tinydreno (linux)
if: inputs.tinydreno == 'true' && runner.os == 'Linux'
shell: bash
run: sudo curl -fL https://github.com/sirhcm/tinydreno/raw/refs/heads/master/libllvm-qcom.so -o /usr/lib/libllvm-qcom.so
# *** OpenCL ***
- name: Install rusticl
if: inputs.opencl == 'true'
shell: bash
run: |
sudo curl -fL https://github.com/sirhcm/tinymesa/releases/download/rusticl-v1/libRusticlOpenCL.so.1.0.0 -o /usr/lib/libRusticlOpenCL.so
sudo mkdir -p /etc/OpenCL/vendors
echo "/usr/lib/libRusticlOpenCL.so" | sudo tee /etc/OpenCL/vendors/rusticl.icd
echo "RUSTICL_ENABLE=llvmpipe" >> "$GITHUB_ENV"
+3 -4
View File
@@ -37,16 +37,15 @@ jobs:
llvm: 'true'
pydeps: 'pyyaml mako'
- name: Install autogen support packages
run: sudo apt-get install -y --no-install-recommends libclang-20-dev llvm-20-dev hip-dev libusb-1.0-0-dev libdrm-dev liburing-dev
run: sudo apt-get install -y --no-install-recommends libclang-20-dev llvm-20-dev hip-dev libusb-1.0-0-dev libdrm-dev
- name: Regenerate autogen files
run: |
find tinygrad/runtime/autogen -type f -name "*.py" -not -path "*/amd/*" -not -name "__init__.py" -not -name "comgr.py" -not -name "metal.py" -not -name "iokit.py" -not -name "corefoundation.py" -not -name "libclang.py" -delete
python3 -c "from tinygrad.runtime.autogen import opencl"
python3 -c "from tinygrad.runtime.autogen import cuda, nvrtc, nvjitlink, nv_570, nv_580, nv_610, nv"
python3 -c "from tinygrad.runtime.autogen import cuda, nvrtc, nvjitlink, nv_570, nv_580, nv"
python3 -c "from tinygrad.runtime.autogen import comgr_3, hsa, hip, amd_gpu, sqtt, rocprof, amdgpu_kd, amdgpu_drm"
python3 -c "from tinygrad.runtime.autogen.am import *"
python3 -c "from tinygrad.runtime.autogen.nv_regs import *"
python3 -c "from tinygrad.runtime.autogen import libc, kfd, io_uring, pci, vfio"
python3 -c "from tinygrad.runtime.autogen import libc, kfd, io_uring, ib, pci, vfio"
python3 -c "from tinygrad.runtime.autogen import llvm"
python3 -c "from tinygrad.runtime.autogen import webgpu"
python3 -c "from tinygrad.runtime.autogen import kgsl, qcom_dsp"
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -1,8 +1,8 @@
name: Run MLPerf Training
on:
#schedule:
# - cron: '5 8 * * *' # Runs at 08:05 UTC (12:05 AM Pacific Time)
schedule:
- cron: '5 8 * * *' # Runs at 08:05 UTC (12:05 AM Pacific Time)
push:
branches:
- update_mlperf
-34
View File
@@ -1,34 +0,0 @@
#!/usr/bin/env python3
# Sticky PR comment via the REST API: find an existing comment containing MARKER and PATCH it, or POST a new one.
# Works on GitHub and Gitea (stdlib only, replaces marocchino/sticky-pull-request-comment which needs GraphQL).
# Env vars: GITHUB_TOKEN, GITHUB_API_URL, GITHUB_REPOSITORY (set by the runner), PR_NUMBER, MARKER, and BODY_FILE or MESSAGE.
import json, os, sys, urllib.request
api, repo = os.environ["GITHUB_API_URL"], os.environ["GITHUB_REPOSITORY"]
pr, marker = os.environ["PR_NUMBER"], os.environ["MARKER"]
body = open(os.environ["BODY_FILE"]).read() if os.environ.get("BODY_FILE") else os.environ["MESSAGE"]
if not body.strip():
print("comment body is empty, not posting")
sys.exit(0)
def req(url, method="GET", payload=None):
r = urllib.request.Request(url, data=None if payload is None else json.dumps(payload).encode(), method=method,
headers={"Authorization": f"token {os.environ['GITHUB_TOKEN']}", "Accept": "application/json", "Content-Type": "application/json"})
return json.load(urllib.request.urlopen(r))
# find the latest sticky comment (paginate, 100 comments per page)
existing, page = None, 1
while True:
comments = req(f"{api}/repos/{repo}/issues/{pr}/comments?per_page=100&page={page}")
stickies = [c for c in comments if marker in (c.get("body") or "")]
if stickies: existing = stickies[-1]
if not comments or len(comments) < 100: break
page += 1
if existing is not None and existing["body"] == body:
print("comment is already up to date")
sys.exit(0)
url = f"{api}/repos/{repo}/issues/comments/{existing['id']}" if existing is not None else f"{api}/repos/{repo}/issues/{pr}/comments"
resp = req(url, 'PATCH' if existing is not None else 'POST', {'body': body})
print(f"{'updated' if existing is not None else 'created'} comment {resp['id']}")
+18 -26
View File
@@ -14,26 +14,23 @@ jobs:
outputs:
branchstat: ${{ steps.brstat.outputs.stat}}
steps:
- name: Check code from PR branch
- name: Check code from PR branch
uses: actions/checkout@v6
with:
repository: ${{ github.event.pull_request.head.repo.full_name }}
ref: ${{ github.event.pull_request.head.sha }}
fetch-depth: 0
# PR code is only inspected with git rev-list, never executed
allow-unsafe-pr-checkout: true
persist-credentials: false
- name: Check whether branch is up-to-date
id: brstat
run: |
# fetch master from the base repo (tinygrad/tinygrad on GitHub, the mirror on Gitea), not the PR head remote
git fetch "${{ github.event.pull_request.base.repo.clone_url }}" master
git remote add tinygrad https://github.com/tinygrad/tinygrad
git fetch tinygrad master
echo "${{ github.event.pull_request.head.sha }}"
git rev-list --left-right --count FETCH_HEAD...${{ github.event.pull_request.head.sha }} | awk '{print "Behind "$1" - Ahead "$2""}'
count=$(git rev-list --left-right --count FETCH_HEAD...${{ github.event.pull_request.head.sha }} | awk '{print $1}')
git rev-list --left-right --count tinygrad/master...${{ github.event.pull_request.head.sha }} | awk '{print "Behind "$1" - Ahead "$2""}'
count=$(git rev-list --left-right --count tinygrad/master...${{ github.event.pull_request.head.sha }} | awk '{print $1}')
if [ $count -gt 0 ]
then
echo "Current branch is behind ${{ github.event.pull_request.base.repo.full_name }} master branch!"
echo "Current branch is behind tinygrad master branch!"
echo "stat=true" >> "$GITHUB_OUTPUT"
else
echo "stat=false" >> "$GITHUB_OUTPUT"
@@ -54,9 +51,6 @@ jobs:
repository: ${{ github.event.pull_request.head.repo.full_name }}
ref: ${{ github.event.pull_request.head.sha }}
path: pr
# PR code is only line-counted by master's sz.py, never executed
allow-unsafe-pr-checkout: true
persist-credentials: false
# the base default to tinygrad master and cannot be other fork branch for security purpose
- name: Checkout code from tinygrad master
uses: actions/checkout@v6
@@ -75,13 +69,13 @@ jobs:
python sz.py "$BASE" "$PR" > loc_content.txt
- name: Comment Code Line Diff
continue-on-error: false
env:
uses: marocchino/sticky-pull-request-comment@v3
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ github.event.pull_request.number }}
MARKER: "### Changes"
BODY_FILE: loc_content.txt
# note: run the script from the base checkout, never from the PR checkout
run: python3 "$GITHUB_WORKSPACE/base/.github/workflows/sticky_comment.py"
ignore_empty: true
skip_unchanged: true
recreate: true
path: loc_content.txt
rebase:
name: Core Library Line Difference
@@ -91,14 +85,12 @@ jobs:
needs: checkbranch
if: needs.checkbranch.outputs.branchstat == 'true'
steps:
# pull_request_target: a plain checkout gets the base repo, so no PR code is executed
- uses: actions/checkout@v6
- name: Comment Rebase
continue-on-error: false
env:
uses: marocchino/sticky-pull-request-comment@v3
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PR_NUMBER: ${{ github.event.pull_request.number }}
MARKER: "line count difference bot is disabled"
MESSAGE: |
This branch currently is behind ${{ github.event.pull_request.base.repo.full_name }} master. The line count difference bot is disabled.
run: python3 .github/workflows/sticky_comment.py
skip_unchanged: true
recreate: true
message: |
This branch currently is behind tinygrad/master. The line count difference bot is disabled.
+450 -267
View File
File diff suppressed because it is too large Load Diff
-6
View File
@@ -1,6 +0,0 @@
# Notes
- Run tests with `-n12` for speed (e.g. `python -m pytest test/null/test_dtype.py -x -q -n12`)
- Run `python -m mypy tinygrad/` to typecheck
- Run `python -m ruff check .` to lint
- Read `./tinygrad/viz/README.md` for profiling and debugging rewrite rules
+5 -9
View File
@@ -72,7 +72,7 @@ As it turns out, 90% of what you need for neural networks are a decent autograd/
Throw in an optimizer, a data loader, and some compute, and you have all you need.
```python
from tinygrad import Tensor, nn, Context
from tinygrad import Tensor, nn
class LinearNet:
def __init__(self):
@@ -86,7 +86,7 @@ optim = nn.optim.Adam([model.l1, model.l2], lr=0.001)
x, y = Tensor.rand(4, 1, 28, 28), Tensor([2,4,3,7]) # replace with real mnist dataloader
with Context(TRAINING=1):
with Tensor.train():
for i in range(10):
optim.zero_grad()
loss = model(x).sparse_categorical_crossentropy(y).backward()
@@ -140,8 +140,8 @@ Documentation along with a quick start guide can be found on the [docs website](
```python
from tinygrad import Tensor
x = Tensor.eye(3)
y = Tensor([[2.0,0,-2.0]])
x = Tensor.eye(3, requires_grad=True)
y = Tensor([[2.0,0,-2.0]], requires_grad=True)
z = y.matmul(x).sum()
z.backward()
@@ -164,9 +164,7 @@ print(y.grad.tolist()) # dz/dy
## Contributing
There has been a lot of interest in tinygrad lately. Following these guidelines will help your PR get accepted. If you do submit a PR, please include a sentence or two about why you want this merged and why you think it will improve the project.
If you are a new contributor with something that looks even close to AI written, it will be closed without feedback and you may be banned from our GitHub. No human should waste time reading AI slop. And for everyone, if you used AI, disclose what you used it for.
There has been a lot of interest in tinygrad lately. Following these guidelines will help your PR get accepted.
We'll start with what will get your PR closed with a pointer to this section:
@@ -198,8 +196,6 @@ python3 test/backend/test_ops.py # just the ops tests
python3 -m pytest test/ # whole test suite
```
For agents, always run tests with `-n12` for speed.
#### Process replay tests
[Process replay](https://github.com/tinygrad/tinygrad/blob/master/test/external/process_replay/README.md) compares your PR's generated kernels against master. If your PR is a refactor or speedup without any expected behavior change, It should include [pr] in the pull request title.
-10
View File
@@ -1,10 +0,0 @@
import os, pytest, signal, threading
@pytest.hookimpl(wrapper=True)
def pytest_runtest_call(item):
t = threading.Timer(int(os.getenv("TEST_TIMEOUT", 300)), os.kill, args=(os.getpid(), signal.SIGABRT))
t.start()
try: yield
finally:
t.cancel()
t.join()
+6 -6
View File
@@ -11,7 +11,7 @@ X_train -= X_train.mean()
# *****
# 1. Define an MNIST model.
from tinygrad import Tensor, Context
from tinygrad import Tensor
l1 = Tensor.kaiming_uniform(128, 784)
l2 = Tensor.kaiming_uniform(10, 128)
@@ -24,11 +24,11 @@ l1n, l2n = l1.numpy(), l2.numpy()
from tinygrad.nn.optim import SGD
optim = SGD([l1, l2])
with Context(TRAINING=1):
X, Y = X_train[(samples:=Tensor.randint(128, high=X_train.shape[0]))], Y_train[samples]
optim.zero_grad()
model(X).sparse_categorical_crossentropy(Y).backward()
optim.schedule_step() # this will step the optimizer without running realize
Tensor.training = True
X, Y = X_train[(samples:=Tensor.randint(128, high=X_train.shape[0]))], Y_train[samples]
optim.zero_grad()
model(X).sparse_categorical_crossentropy(Y).backward()
optim.schedule_step() # this will step the optimizer without running realize
# *****
# 3. Create a schedule (linear uop).
+5 -3
View File
@@ -67,7 +67,8 @@ def example_2_hip(a:Tensor, correct):
# the sink specifies the GLOBAL and LOCAL sizes, along with the input buffers and name
sink = UOp.sink(UOp.special(GLOBALS, 'gidx0'), UOp.special(THREADS, 'lidx0'), out, buf,
arg=KernelInfo(name="hip_reduce_sum_kernel"))
return UOp(Ops.PROGRAM, src=(sink, UOp(Ops.LINEAR, src=(*sink.src, sink)), UOp(Ops.SOURCE, arg=code), UOp(Ops.BINARY, arg=lib)))
return UOp(Ops.PROGRAM, src=(sink, UOp(Ops.DEVICE, arg=Device.DEFAULT),
UOp(Ops.LINEAR, src=(*sink.src, sink)), UOp(Ops.SOURCE, arg=code), UOp(Ops.BINARY, arg=lib)))
eval_harness("HIP kernel", a, lambda x: Tensor.empty(GLOBALS).custom_kernel(x, fxn=hip_reduce_sum)[0].sum(), check=correct)
def example_3_custom_uop(a:Tensor, correct):
@@ -88,7 +89,7 @@ def example_3_custom_uop(a:Tensor, correct):
# store all the per lane accumulators to LOCAL
local_accs = UOp.placeholder((LCLS,), dtypes.float, slot=0, addrspace=AddrSpace.LOCAL)
local_accs = local_accs.after(local_accs[lane].store(acc[0]))
local_accs = local_accs.after(local_accs[lane].store(acc[0]).barrier())
# accumulate LOCALs into a single per CU accumulator
late_reduce_loop = UOp.range(LCLS, 3, AxisType.REDUCE)
@@ -122,7 +123,8 @@ def example_5_custom_assembly(a:Tensor, correct):
offset_dwords = (self.labels[inst._target] - inst._pos - inst.size()) // 4
if not -32768 <= offset_dwords <= 32767: raise ValueError(f"branch to '{inst._target}' offset {offset_dwords} exceeds simm16 range")
inst.simm16 = offset_dwords
return UOp(Ops.PROGRAM, src=(sink, UOp(Ops.LINEAR, src=tuple([UOp(Ops.INS, arg=x) for x in self.instructions]))))
return UOp(Ops.PROGRAM, src=(sink, UOp(Ops.DEVICE, arg=Device.DEFAULT),
UOp(Ops.LINEAR, src=tuple([UOp(Ops.INS, arg=x) for x in self.instructions]))))
CU_COUNT = 32
LANES = 64
+1 -1
View File
@@ -62,7 +62,7 @@ A lot of work can still be done here. For example, we never copy the inputs to o
Many accelerators have Tensor Cores / MAC arrays / systolic arrays. The main value of these is that, since they are 2-D, they create an n^2 ratio between the compute and the input data.
GPUs use Tensor Cores instead of MAC arrays to fit better in the GPU warp paradigm. This is because the output of Tensor Cores is O(n) wrt the input, while the output of MAC arrays is O(n^2)
GPUs use Tensor Cores instead of MAC arrays to fit better in the GPU warp paradigm. This is because the output of Tensor Cores is O(n) wrt the input, while the output of MAC arrays like the AMX is O(n^2)
We have a simple framework in tinygrad for adding these ALU blocks and achieving good performance from them.
+1 -2
View File
@@ -1,8 +1,7 @@
::: tinygrad.dtype.DType
::: tinygrad.dtype.DTypes
::: tinygrad.dtype.dtypes
options:
heading: dtypes
members: true
members_order: source
show_labels: false
+3 -2
View File
@@ -24,7 +24,7 @@ You will see `CUDA` here on a GPU instance, or `CPU` here on a CPU instance.
We'll use the model from [the Keras tutorial](https://keras.io/examples/vision/mnist_convnet/).
```python
from tinygrad import Tensor, nn, Context
from tinygrad import Tensor, nn
class Model:
def __init__(self):
@@ -74,8 +74,8 @@ We'll use the Adam optimizer. The `nn.state.get_parameters` will walk the model
```python
optim = nn.optim.Adam(nn.state.get_parameters(model))
batch_size = 128
@Context(TRAINING=1)
def step():
Tensor.training = True # makes dropout work
samples = Tensor.randint(batch_size, high=X_train.shape[0])
X, Y = X_train[samples], Y_train[samples]
optim.zero_grad()
@@ -143,6 +143,7 @@ Since we are just randomly sampling from the dataset, there's no real concept of
for step in range(7000):
loss = jit_step()
if step%100 == 0:
Tensor.training = False
acc = (model(X_test).argmax(axis=1) == Y_test).mean().item()
print(f"step {step:4d}, loss {loss.item():.2f}, acc {acc*100.:.2f}%")
```
+6 -7
View File
@@ -133,7 +133,7 @@ For our loss function we will be using sparse categorical cross entropy loss. Th
```python
def sparse_categorical_crossentropy(self, Y, ignore_index=-1) -> Tensor:
loss_mask = Y != ignore_index
y_counter = Tensor.arange(self.shape[-1], dtype=dtypes.int32).unsqueeze(0).expand(Y.numel(), self.shape[-1])
y_counter = Tensor.arange(self.shape[-1], dtype=dtypes.int32, requires_grad=False, device=self.device).unsqueeze(0).expand(Y.numel(), self.shape[-1])
y = ((y_counter == Y.flatten().reshape(-1, 1)).where(-1.0, 0) * loss_mask.reshape(-1, 1)).reshape(*Y.shape, self.shape[-1])
return self.log_softmax().mul(y).sum() / loss_mask.sum()
```
@@ -165,18 +165,17 @@ from extra.datasets import fetch_mnist
Now we have everything we need to start training our neural network.
We will be training for 1000 steps with a batch size of 64.
We use `with Context(TRAINING=1)` to enable training mode.
We use `with Tensor.train()` to set the internal flag `Tensor.training` to `True` during training.
Upon exit, the flag is restored to its previous value by the context manager.
```python
from tinygrad import Context
X_train, Y_train, X_test, Y_test = fetch_mnist()
with Context(TRAINING=1):
with Tensor.train():
for step in range(1000):
# random sample a batch
samp = np.random.randint(0, X_train.shape[0], size=(64))
batch = Tensor(X_train[samp])
batch = Tensor(X_train[samp], requires_grad=False)
# get the corresponding labels
labels = Tensor(Y_train[samp])
@@ -214,7 +213,7 @@ with Timing("Time: "):
for step in range(1000):
# random sample a batch
samp = np.random.randint(0, X_test.shape[0], size=(64))
batch = Tensor(X_test[samp])
batch = Tensor(X_test[samp], requires_grad=False)
# get the corresponding labels
labels = Y_test[samp]
@@ -258,7 +257,7 @@ with Timing("Time: "):
for step in range(1000):
# random sample a batch
samp = np.random.randint(0, X_test.shape[0], size=(64))
batch = Tensor(X_test[samp])
batch = Tensor(X_test[samp], requires_grad=False)
# get the corresponding labels
labels = Y_test[samp]
+5 -1
View File
@@ -83,5 +83,9 @@ NV backend supports several interfaces for communicating with devices:
## CPU Arch
The CPU renderers may be additionally configured using the arch component of [the `DEV` environment variable](env_vars.md#dev-variable).
CPU arch should be specified as a comma-separated list of parameters, and must contain at least two values: the architecture family (ie. x86_64, arm64, or riscv64) and the cpu type (as accepted by `clang`'s `-march`).
If native is specified as the cpu type, tinygrad (or delegate compiler) will query the host cpu type. Additional comma-separated values are interpreted as cpu feature flags. When a value is preceded by a `-` character, the corresponding feature flag will be disabled, otherwise the flag will be enabled.
If native is specified as the cpu type, tinygrad (or delegate compiler) will query the host cpu type. Additional comma-separated values may be specified as follows:
* `AMX`: emit Apple silicon AMX instructions
All other additional values are interpreted as cpu feature flags. When a value is preceded by a `-` character, the corresponding feature flag will be disabled, otherwise the flag will be enabled.
Note that enabled feature flags should not be preceded by a `+`.
+196
View File
@@ -0,0 +1,196 @@
from tinygrad import Tensor, dtypes, Context, getenv, UOp, fetch
from tinygrad.uop.ops import Ops, PatternMatcher, UPat
from tinygrad.uop.symbolic import symbolic
from tinygrad.codegen import Renderer
from tinygrad.codegen.opt import Opt, OptOps
# ************************* implementation of the problem ************************
def myhash(a: Tensor) -> Tensor:
a = (a + 0x7ED55D16) + (a << 12)
a = (a ^ 0xC761C23C) ^ (a >> 19)
a = (a + 0x165667B1) + (a << 5)
a = (a + 0xD3A2646C) ^ (a << 9)
a = (a + 0xFD7046C5) + (a << 3)
a = (a ^ 0xB55A4F09) ^ (a >> 16)
return a
def select_with_where_tree(values: Tensor, relative_idx: Tensor) -> Tensor:
n = values.shape[0]
if n == 1: return values[0].expand(relative_idx.shape)
mid = n // 2
left = select_with_where_tree(values[:mid], relative_idx)
right = select_with_where_tree(values[mid:], relative_idx - mid)
go_left = relative_idx < mid
return go_left.where(left, right)
def tree_traversal(forest: Tensor, val: Tensor, height: int, rounds: int, where_tree_threshold=3) -> Tensor:
# All walkers start at idx=0
idx = Tensor.zeros(val.shape, device=val.device, dtype=dtypes.uint32)
for r in range(rounds):
level = r % (height + 1)
level_start = (1 << level) - 1
level_size = 1 << level
if level == 0:
# At root (level 0), all walkers are at idx=0
# No gather needed, just broadcast the root value
node_val = forest[0].expand(val.shape)
idx = idx * 0 # Reset to 0
elif level <= where_tree_threshold:
# Small level: use where-tree
level_values = forest[level_start : level_start + level_size]
relative_idx = (idx - level_start)
node_val = select_with_where_tree(level_values, relative_idx)
else:
# Large level: use gather
node_val = forest.gather(0, idx)
val = myhash(val ^ node_val)
idx = (idx << 1) + (1 + (val & 1))
# No wrap check needed! At round 10 (level becomes 0), we reset idx above.
return val.contiguous(arg=(Opt(OptOps.UPCAST, 0, 8),))
# ************************* renderer for VLIW machine *************************
def loop_unrolling(sink:UOp):
rng = [x for x in sink.toposort() if x.op is Ops.RANGE]
if len(rng) == 0: return None
print(f"unrolling loop with size {rng[0].vmax+1}")
unrolled_sinks = [sink.substitute({rng[0]:rng[0].const_like(i)}).src[0] for i in range(rng[0].vmax+1)]
return UOp.sink(*unrolled_sinks, arg=sink.arg)
global_addrs = []
vliw_prepare = PatternMatcher([
# loop unrolling (should be a part of tinygrad)
(UPat(Ops.SINK, name="sink"), loop_unrolling),
# cast is fake
(UPat(Ops.CAST, name="c"), lambda c: c.src[0]),
# rewrites to hardcode the addresses in memory
(UPat(Ops.PARAM, name="dg"), lambda dg: UOp.const(dtypes.uint, global_addrs[dg.arg])),
# INDEX is just plus
(UPat(Ops.INDEX, name="i"), lambda i: i.src[0]+i.src[1]),
])+symbolic
class VLIWRenderer(Renderer):
has_local = False # TODO: this should be the default / cleaned up
# this says this backend supports MULACC + more. decompositions uses this
code_for_op: dict = {Ops.MULACC: None, Ops.ADD: "+", Ops.MUL: "*",
Ops.XOR: "^", Ops.AND: "&", Ops.OR: "|",
Ops.SHL: "<<", Ops.SHR: ">>", Ops.CMPLT: "<"}
# this matcher runs while still in graph form
pre_matcher = vliw_prepare
def render(self, uops:list[UOp]):
# TODO: this is a minimal renderer. for low cycle count, make it good
# to get speed, you need to add VLIW packing
# to get under 1536 regs, you need to add a register allocator
# we left the fun parts to you
print(f"rendering with {len(uops)} uops")
reg, inst = 0, []
r: dict[UOp, int] = {}
for u in uops:
assert u.dtype.count in (1,8), "dtype count must be 1 or 8"
# dumb register allocator
if u.op not in {Ops.STORE, Ops.SINK, Ops.GEP}:
r[u] = reg
reg += u.dtype.count
# render UOps to instructions
match u.op:
case Ops.SINK:
inst.append({"flow": [("halt",)]})
case Ops.CONST:
inst.append({"load": [("const", r[u], u.arg)]})
case Ops.GEP:
# a GEP is just an alias to a special register in the vector
r[u] = r[u.src[0]] + u.arg[0]
case Ops.STACK:
if all(s == u.src[0] for s in u.src):
# if all sources are the same, we can broadcast
inst.append({"valu": [("vbroadcast", r[u], r[u.src[0]])]})
else:
# this is a copy into a contiguous chunk of registers
inst.extend({"flow": [("add_imm", r[u]+i, r[s], 0)]} for i,s in enumerate(u.src) if r[s] != r[u]+i)
case Ops.LOAD:
op = "vload" if u.dtype.count > 1 else "load"
inst.append({"load": [(op, r[u], r[u.src[0]])]})
case Ops.STORE:
op = "vstore" if u.src[1].dtype.count > 1 else "store"
inst.append({"store": [(op, r[u.src[0]], r[u.src[1]])]})
case Ops.MULACC:
assert u.dtype.count == 8
inst.append({"valu": [("multiply_add", r[u], r[u.src[0]], r[u.src[1]], r[u.src[2]])]})
case Ops.WHERE:
assert u.dtype.count == 8
inst.append({"flow": [("vselect", r[u], r[u.src[0]], r[u.src[1]], r[u.src[2]])]})
case _ if u.op in self.code_for_op:
cat = "valu" if u.dtype.count > 1 else "alu"
inst.append({cat: [(self.code_for_op[u.op], r[u], r[u.src[0]], r[u.src[1]])]})
case _:
raise NotImplementedError(f"unhandled op {u.op}")
return repr(inst)
# ************************* test and render *************************
import sys, types
PROBLEM_URL = "https://raw.githubusercontent.com/anthropics/original_performance_takehome/refs/heads/main/tests/frozen_problem.py"
sys.modules["problem"] = problem = types.ModuleType("problem")
exec(fetch(PROBLEM_URL).read_text(), problem.__dict__)
if __name__ == "__main__":
batch_size = getenv("BS", 256)
height = 10
rounds = getenv("ROUNDS", 16)
# build problem
tree = problem.Tree.generate(height)
inp = problem.Input.generate(tree, batch_size, rounds)
mem = problem.build_mem_image(tree, inp)
global_addrs.extend([mem[6], mem[6], mem[4]]) # output, input, forest
# *** verify the kernel in tinygrad compared to reference ***
forest_t = Tensor(tree.values, dtype=dtypes.uint32)
val_t = Tensor(inp.values, dtype=dtypes.uint32)
if getenv("VERIFY", 1):
# verify on normal tinygrad device
with Context(PCONTIG=2):
out = tree_traversal(forest_t, val_t, height, rounds)
val_out = out.tolist()
problem.reference_kernel(tree, inp)
assert val_out == inp.values
print("verification passed")
# *** render to device ***
from tinygrad.codegen import to_program
with Context(PCONTIG=2, DEVECTORIZE=2, SPEC=0):
out = tree_traversal(forest_t, val_t, height, rounds)
sink = out.schedule_linear().src[-1].src[0]
prg = to_program(sink, VLIWRenderer())
# *** run on Machine and compare ***
# NOTE: the scratch size needs to be reduced to 1536 when you have a register allocator
src = eval(prg.src[3].arg)
max_regs = max(t[1] for instr in src for v in instr.values() for t in v if len(t) > 1) + 8
print(f"{max_regs:5d} regs used" + ("" if max_regs <= 1536 else " <-- WARNING: TOO MANY REGISTERS, MUST BE <= 1536"))
machine = problem.Machine(mem, src, problem.DebugInfo(scratch_map={}), n_cores=1, trace=False, scratch_size=max_regs)
machine.run()
print(f"ran for {machine.cycle:5d} cycles" + ("" if machine.cycle <= 1363 else " <-- EVEN CLAUDE GOT 1363"))
# compare to reference
ref_mem = mem.copy()
for _ in problem.reference_kernel2(ref_mem, {}): pass
assert machine.mem[mem[6]:mem[6]+mem[2]] == ref_mem[mem[6]:mem[6]+mem[2]]
print("compare passed!")
+2 -2
View File
@@ -4,10 +4,10 @@ from tinygrad.dtype import DTypeLike, dtypes
import math
# rewritten from numpy
def rfftfreq(n: int, d: float = 1.0) -> Tensor:
def rfftfreq(n: int, d: float = 1.0, device=None) -> Tensor:
val = 1.0 / (n * d)
N = n // 2 + 1
results = Tensor.arange(N)
results = Tensor.arange(N, device=device)
return results * val
# just like in librosa
+2 -2
View File
@@ -1,6 +1,6 @@
from typing import Tuple
import time
from tinygrad import Tensor, TinyJit, nn, Context
from tinygrad import Tensor, TinyJit, nn
import gymnasium as gym
from tinygrad.helpers import trange
import numpy as np # TODO: remove numpy import
@@ -55,7 +55,7 @@ if __name__ == "__main__":
@TinyJit
def train_step(x:Tensor, selected_action:Tensor, reward:Tensor, old_log_dist:Tensor) -> Tuple[Tensor, Tensor, Tensor]:
with Context(TRAINING=1):
with Tensor.train():
log_dist, value = model(x)
action_mask = (selected_action.reshape(-1, 1) == Tensor.arange(log_dist.shape[1]).reshape(1, -1).expand(selected_action.shape[0], -1)).float()
+5 -4
View File
@@ -9,7 +9,8 @@ from extra.lr_scheduler import OneCycleLR
GPUS = [f'{Device.DEFAULT}:{i}' for i in range(getenv("GPUS", 1))]
# override tinygrad defaults
Context(DEFAULT_FLOAT=dtypes.half, FUSE_OPTIM=1).__enter__()
dtypes.default_float = dtypes.half
Context(FUSE_OPTIM=1).__enter__()
# from https://github.com/tysam-code/hlb-CIFAR10/blob/main/main.py
batchsize = getenv("BS", 1024)
@@ -66,8 +67,8 @@ class ConvGroup:
self.conv2 = nn.Conv2d(channels_out, channels_out, kernel_size=3, padding=1, bias=False)
self.norm1 = nn.BatchNorm(channels_out, track_running_stats=False, eps=1e-12, momentum=hyp['net']['batch_norm_momentum'])
self.norm2 = nn.BatchNorm(channels_out, track_running_stats=False, eps=1e-12, momentum=hyp['net']['batch_norm_momentum'])
cast(Tensor, self.norm1.weight).is_param_(False)
cast(Tensor, self.norm2.weight).is_param_(False)
cast(Tensor, self.norm1.weight).requires_grad = False
cast(Tensor, self.norm2.weight).requires_grad = False
def __call__(self, x:Tensor) -> Tensor:
x = self.norm1(self.conv1(x).max_pool2d().float()).cast(dtypes.default_float).quick_gelu()
return self.norm2(self.conv2(x).float()).cast(dtypes.default_float).quick_gelu() + x
@@ -121,7 +122,7 @@ if __name__ == "__main__":
return ret.mul(hyp['opt']['loss_scale_scaler']*loss_batchsize_scaler).sum().div(hyp['opt']['loss_scale_scaler'])
@TinyJit
@Context(TRAINING=1)
@Tensor.train()
def train_step(idxs:Tensor) -> Tensor:
X, Y = X_train[idxs], Y_train[idxs]
if len(GPUS) > 1:
+2 -2
View File
@@ -1,6 +1,6 @@
# model based off https://medium.com/data-science/going-beyond-99-mnist-handwritten-digits-recognition-cfff96337392
from typing import Callable
from tinygrad import Tensor, TinyJit, nn, GlobalCounters, function, Context
from tinygrad import Tensor, TinyJit, nn, GlobalCounters, function
from tinygrad.helpers import getenv, colored, trange
from tinygrad.nn.datasets import mnist
@@ -19,7 +19,7 @@ class Model:
def __call__(self, x:Tensor) -> Tensor: return x.sequential(self.layers)
@TinyJit
@Context(TRAINING=1)
@Tensor.train()
def train_step(self, X_train:Tensor, Y_train:Tensor) -> Tensor:
opt.zero_grad()
samples = Tensor.randint(getenv("BS", 512), high=X_train.shape[0])
+2 -2
View File
@@ -1,6 +1,6 @@
# model based off https://towardsdatascience.com/going-beyond-99-mnist-handwritten-digits-recognition-cfff96337392
from typing import List, Callable
from tinygrad import Tensor, TinyJit, nn, GlobalCounters, Device, Context
from tinygrad import Tensor, TinyJit, nn, GlobalCounters, Device
from tinygrad.helpers import getenv, colored, trange
from tinygrad.nn.datasets import mnist
@@ -31,7 +31,7 @@ if __name__ == "__main__":
@TinyJit
def train_step() -> Tensor:
with Context(TRAINING=1):
with Tensor.train():
opt.zero_grad()
samples = Tensor.randint(getenv("BS", 512), high=X_train.shape[0])
Xt, Yt = X_train[samples].shard_(GPUS, axis=0), Y_train[samples].shard_(GPUS, axis=0) # we shard the data on axis 0
+14 -5
View File
@@ -22,6 +22,10 @@ class Attention:
self.head_dim = dim // n_heads
def __call__(self, x:Tensor, start_pos:Variable, mask:Optional[Tensor]) -> Tensor:
if mask is not None or start_pos.val == 0:
# no symbolic shape qkv when consuming prompts
start_pos = start_pos.val
if HALF: x = x.half()
xqkv = self.c_attn(x).reshape(None, None, 3, self.n_heads, self.head_dim)
xq, xk, xv = [xqkv[:, :, i, :, :] for i in range(3)]
@@ -34,8 +38,12 @@ class Attention:
# update the cache
self.cache_kv[:, :, start_pos:start_pos+seqlen, :, :].assign(Tensor.stack(xk, xv)).realize()
keys = self.cache_kv[0][:, :start_pos+seqlen, :, :]
values = self.cache_kv[1][:, :start_pos+seqlen, :, :]
if start_pos > 0:
keys = self.cache_kv[0][:, :start_pos+seqlen, :, :]
values = self.cache_kv[1][:, :start_pos+seqlen, :, :]
else:
keys = xk
values = xv
xq, keys, values = xq.transpose(1, 2), keys.transpose(1, 2), values.transpose(1, 2)
return self.c_proj(xq.scaled_dot_product_attention(keys, values, mask).transpose(1, 2).reshape(bsz, seqlen, self.dim))
@@ -78,14 +86,15 @@ class Transformer:
seqlen = tokens.shape[1]
tok_emb = self.wte(tokens)
# start_pos is a bound Variable, so everything below it stays symbolic
pos_emb = self.wpe(self.allpos.shrink((None, (start_pos, start_pos+seqlen))))
# not symbolic when consuming the prompt
selected_pos = (0, seqlen) if start_pos.val == 0 else (start_pos, start_pos+1)
pos_emb = self.wpe(self.allpos.shrink((None, selected_pos)))
h = tok_emb + pos_emb
if HALF: h = h.half()
mask = Tensor.full((1, 1, seqlen, start_pos+seqlen), float("-inf"), dtype=h.dtype).triu(start_pos+1) if seqlen > 1 else None
mask = Tensor.full((1, 1, seqlen, start_pos.val+seqlen), float("-inf"), dtype=h.dtype).triu(start_pos.val+1) if seqlen > 1 else None
for hi in self.h: h = hi(h, start_pos, mask)
+7 -6
View File
@@ -1,6 +1,6 @@
import itertools
from typing import Callable
from tinygrad import nn, Tensor, dtypes, Device, TinyJit, Context
from tinygrad import nn, Tensor, dtypes, Device, TinyJit
from tinygrad.helpers import getenv, trange, partition
class Model:
@@ -35,21 +35,22 @@ if __name__ == "__main__":
params = nn.state.get_parameters(model)
# init params
# init params, set requires grad on the ones we need gradients of
for x in params:
if x.requires_grad is None: x.requires_grad_()
x.replace(x.contiguous())
Tensor.realize(*params)
# split params (with grads) and buffers (without)
params, buffers = partition(params, lambda x: x.is_param)
params, buffers = partition(params, lambda x: x.requires_grad)
print(f"params: {len(params)} buffers: {len(buffers)}")
# optim params
pos_params = list(itertools.accumulate(params, lambda x,y: x+y.numel(), initial=0))
adam_m = Tensor.zeros(pos_params[-1], device="CPU").contiguous()
adam_v = Tensor.zeros(pos_params[-1], device="CPU").contiguous()
adam_b1_t = Tensor.ones((1,), dtype=dtypes.float32, device="CPU").contiguous()
adam_b2_t = Tensor.ones((1,), dtype=dtypes.float32, device="CPU").contiguous()
adam_b1_t = Tensor.ones((1,), dtype=dtypes.float32, device="CPU", requires_grad=False).contiguous()
adam_b2_t = Tensor.ones((1,), dtype=dtypes.float32, device="CPU", requires_grad=False).contiguous()
adam_params = [adam_m, adam_v, adam_b1_t, adam_b2_t]
# create loss and grads. init all state so the JIT works on microbatch
@@ -59,7 +60,7 @@ if __name__ == "__main__":
Tensor.realize(*params, *buffers, *adam_params, loss, grads)
@TinyJit
@Context(TRAINING=1)
@Tensor.train()
def microbatch():
samples = Tensor.randint(BS // ACC_STEPS, high=X_train.shape[0])
for t in params: t.grad = None
+29 -23
View File
@@ -10,7 +10,7 @@ from extra.lr_scheduler import OneCycleLR
from tinygrad import nn, dtypes, Tensor, Device, GlobalCounters, TinyJit, Variable
from tinygrad.nn.state import get_state_dict
from tinygrad.nn import optim
from tinygrad.helpers import Context, BEAM, WINO, getenv, colored, prod, TRAINING
from tinygrad.helpers import Context, BEAM, WINO, getenv, colored, prod
from extra.bench_log import BenchEvent, WallTimeEvent
cifar_mean = [0.4913997551666284, 0.48215855929893703, 0.4465309133731618]
@@ -30,9 +30,9 @@ class UnsyncedBatchNorm:
if affine: self.weight, self.bias = Tensor.ones(sz, dtype=dtypes.float32), Tensor.zeros(sz, dtype=dtypes.float32)
else: self.weight, self.bias = None, None
self.running_mean = Tensor.zeros(num_devices, sz, dtype=dtypes.float32).is_param_(False)
self.running_var = Tensor.ones(num_devices, sz, dtype=dtypes.float32).is_param_(False)
self.num_batches_tracked = Tensor.zeros(1, dtype=dtypes.int).is_param_(False)
self.running_mean = Tensor.zeros(num_devices, sz, dtype=dtypes.float32, requires_grad=False)
self.running_var = Tensor.ones(num_devices, sz, dtype=dtypes.float32, requires_grad=False)
self.num_batches_tracked = Tensor.zeros(1, dtype=dtypes.int, requires_grad=False)
def __call__(self, x:Tensor):
xr = x.reshape(self.num_devices, -1, *x.shape[1:]).cast(dtypes.float32)
@@ -44,7 +44,7 @@ class UnsyncedBatchNorm:
return ret.reshape(x.shape).cast(x.dtype)
def calc_stats(self, x:Tensor):
if TRAINING:
if Tensor.training:
# This requires two full memory accesses to x
# https://github.com/pytorch/pytorch/blob/c618dc13d2aa23625cb0d7ada694137532a4fa33/aten/src/ATen/native/cuda/Normalization.cuh
# There's "online" algorithms that fix this, like https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Welford's_Online_algorithm
@@ -68,7 +68,8 @@ class UnsyncedBatchNorm:
class BatchNorm(nn.BatchNorm2d if getenv("SYNCBN") else UnsyncedBatchNorm):
def __init__(self, num_features):
super().__init__(num_features, track_running_stats=False, eps=1e-12, momentum=0.85, affine=True)
self.weight.is_param_(False)
self.weight.requires_grad = False
self.bias.requires_grad = True
class ConvGroup:
def __init__(self, channels_in, channels_out):
@@ -152,21 +153,26 @@ def train_cifar():
# ========== Model ==========
def whitening(X, kernel_size=hyp['net']['kernel_size']):
def _patches(data:Tensor, patch_size=(kernel_size,kernel_size)):
def _cov(X):
return (X.T @ X) / (X.shape[0] - 1)
def _patches(data, patch_size=(kernel_size,kernel_size)):
h, w = patch_size
_, c, _, _ = data.shape
return data._pool((h, w)).permute(1, 4, 5, 0, 3, 2).reshape(c*h*w, -1)
c = data.shape[1]
axis = (2, 3)
return np.lib.stride_tricks.sliding_window_view(data, window_shape=(h,w), axis=axis).transpose((0,3,2,1,4,5)).reshape((-1,c,h,w))
def _eigens(patches):
cov = ((patches @ patches.T) / (patches.shape[1] - 1)).numpy()
eigvals, eigvecs = np.linalg.eigh(cov, UPLO='U')
return np.flip(eigvals, 0), np.flip(eigvecs.T.reshape(patches.shape[0], X.shape[1], kernel_size, kernel_size), 0)
n,c,h,w = patches.shape
Σ = _cov(patches.reshape(n, c*h*w))
Λ, V = np.linalg.eigh(Σ, UPLO='U')
return np.flip(Λ, 0), np.flip(V.T.reshape(c*h*w, c, h, w), 0)
# NOTE: np.linalg.eigh only supports float32 so the whitening layer weights need to be converted to float16 manually
eigvals, eigvecs = _eigens(_patches(X.float()))
W = eigvecs/np.sqrt(eigvals+1e-2)[:,None,None,None]
Λ, V = _eigens(_patches(X.float().numpy()))
W = V/np.sqrt(Λ+1e-2)[:,None,None,None]
return Tensor(W.astype(np.float32)).cast(dtypes.default_float).is_param_(False)
return Tensor(W.astype(np.float32), requires_grad=False).cast(dtypes.default_float)
# ========== Loss ==========
def cross_entropy(x:Tensor, y:Tensor, reduction:str='mean', label_smoothing:float=0.0) -> Tensor:
@@ -218,7 +224,7 @@ def train_cifar():
@TinyJit
def augmentations(X:Tensor, Y:Tensor):
perms = Tensor.randperm(X.shape[0], device=X.device) # We reuse perms for cutmix, because they are expensive to generate
perms = Tensor.randperm(X.shape[0], device=X.device) # We reuse perms for cutmix, because they are expensivne to generate
if getenv("RANDOM_CROP", 1):
X = random_crop(X, crop_size=32)
if getenv("RANDOM_FLIP", 1):
@@ -258,6 +264,7 @@ def train_cifar():
# self.model_ema = copy.deepcopy(net) # won't work for opencl due to unpickeable pyopencl._cl.Buffer
self.net_ema = SpeedyResNet(w)
for net_ema_param, net_param in zip(get_state_dict(self.net_ema).values(), get_state_dict(net).values()):
net_ema_param.requires_grad = False
net_ema_param.assign(net_param.numpy())
@TinyJit
@@ -300,7 +307,7 @@ def train_cifar():
params_bias = []
params_non_bias = []
for params in params_dict:
if params_dict[params].is_param:
if params_dict[params].requires_grad is not False:
if 'bias' in params:
params_bias.append(params_dict[params])
else:
@@ -309,9 +316,6 @@ def train_cifar():
opt_bias = optim.SGD(params_bias, lr=0.01, momentum=hyp['opt']['momentum'], nesterov=True, weight_decay=hyp['opt']['bias_decay'])
opt_non_bias = optim.SGD(params_non_bias, lr=0.01, momentum=hyp['opt']['momentum'], nesterov=True, weight_decay=hyp['opt']['non_bias_decay'])
# realize model params and optimizer state before JIT to avoid cache misses
Tensor.realize(*params_dict.values(), *opt_bias.b, *opt_non_bias.b)
# NOTE taken from the hlb_CIFAR repository, might need to be tuned
initial_div_factor = hyp['opt']['initial_div_factor']
final_lr_ratio = hyp['opt']['final_lr_ratio']
@@ -328,7 +332,9 @@ def train_cifar():
# index 0 for bias and 1 for non-bias
optimizer.zero_grad()
loss.backward()
return loss.realize(*optimizer.schedule_step(), *lr_scheduler[0].schedule_step(), *lr_scheduler[1].schedule_step())
optimizer.step()
lr_scheduler[0].step()
lr_scheduler[1].step()
return loss.realize()
train_step_jitted = TinyJit(train_step)
@@ -355,11 +361,11 @@ def train_cifar():
i = 0
eval_acc_pct = 0.0
batcher = fetch_batches(X_train, Y_train, BS=BS, is_train=True)
with Context(TRAINING=1):
with Tensor.train():
st = time.monotonic()
while i <= STEPS:
if i % getenv("EVAL_STEPS", STEPS) == 0 and i > 1 and not getenv("DISABLE_BACKWARD"):
# Using Context(TRAINING=0) here actually bricks batchnorm, even with track_running_stats=True
# Use Tensor.training = False here actually bricks batchnorm, even with track_running_stats=True
corrects = []
corrects_ema = []
losses = []
+1 -1
View File
@@ -102,7 +102,7 @@ class Int8Embedding:
self.weight, self.scale = Tensor.ones(vocab_size, embed_size, dtype=dtypes.int8), Tensor.ones(vocab_size, dtype=dtypes.half)
def __call__(self, idx:Tensor) -> Tensor:
if not hasattr(self, 'arange'): self.arange = Tensor.arange(self.vocab_sz).unsqueeze(-1)
if not hasattr(self, 'arange'): self.arange = Tensor.arange(self.vocab_sz, requires_grad=False, device=self.weight.device).unsqueeze(-1)
big_shp = idx.shape+(self.vocab_sz, self.embed_sz)
arange, idx, vals = self.arange.expand(big_shp), idx.reshape(idx.shape+(1, 1)).expand(big_shp), (self.weight.cast(self.scale.dtype).T*self.scale).T
return (arange == idx).mul(vals).sum(-2, dtype=vals.dtype)
+16 -16
View File
@@ -3,7 +3,7 @@ import os
if "NOOPT" not in os.environ: os.environ["NOOPT"] = "1"
from tinygrad import Device, nn, Tensor, dtypes
from train_gpt2 import GPT, GPTConfig
from tinygrad.helpers import DEV, dedup, flatten, getenv, GlobalCounters, to_function_name, Context
from tinygrad.helpers import DEV, dedup, flatten, getenv, GlobalCounters, to_function_name
from tinygrad.engine.realize import get_kernel
from tinygrad.schedule.memory import memory_planner
from tinygrad.uop.ops import Ops
@@ -23,23 +23,23 @@ if __name__ == "__main__":
#B, T = Variable("B", 1, 128).bind(4), 64 #Variable("T", 1, 1024).bind(64)
B, T = 4, 64
Tensor.training = True
optimizer = nn.optim.Adam(nn.state.get_parameters(model), lr=1e-4)
warmup_count = getenv("WARMUP", 3)
with Context(TRAINING=1):
for i in range(warmup_count): # TODO: why does it take three and not two to stabilize
GlobalCounters.reset()
X = Tensor.empty(4, 64, dtype=dtypes.int).reshape(B, T)
Y = Tensor.empty(4, 64, dtype=dtypes.int).reshape(B, T)
_, loss = model(X, Y)
optimizer.zero_grad()
if getenv("BACKWARD", 1):
loss.backward()
tensors = optimizer.schedule_step()
else:
tensors = []
sched = loss.schedule(*tensors)
print(f"calls {i}:", len(sched))
#run_schedule(sched[:])
for i in range(warmup_count): # TODO: why does it take three and not two to stabilize
GlobalCounters.reset()
X = Tensor.empty(4, 64, dtype=dtypes.int).reshape(B, T)
Y = Tensor.empty(4, 64, dtype=dtypes.int).reshape(B, T)
_, loss = model(X, Y)
optimizer.zero_grad()
if getenv("BACKWARD", 1):
loss.backward()
tensors = optimizer.schedule_step()
else:
tensors = []
sched = loss.schedule(*tensors)
print(f"calls {i}:", len(sched))
#run_schedule(sched[:])
sched = memory_planner(sched)
ast_dedup = dedup([si.ast for si in sched if si.ast.op is Ops.SINK])
srcs = {}
+5 -4
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
import os, math, time
import numpy as np
from tinygrad import Tensor, nn, fetch, Device, TinyJit, GlobalCounters, Context
from tinygrad import Tensor, nn, fetch, Device, TinyJit, GlobalCounters
from dataclasses import dataclass
@dataclass
@@ -25,7 +25,7 @@ class CausalSelfAttention:
self.n_embd = config.n_embd
# not really a 'bias', more of a mask, but following the OpenAI/HF naming though
self.bias = Tensor.ones(1, 1, config.block_size, config.block_size).tril()
self.bias.is_param_(False)
self.bias.requires_grad = False
def __call__(self, x:Tensor):
B, T, C = x.shape
@@ -99,7 +99,7 @@ class GPT:
def __call__(self, idx:Tensor, targets=None):
b, t = idx.shape
pos = Tensor.arange(0, t)
pos = Tensor.arange(0, t, device=idx.device)
tok_emb = self.wte(idx) # token embeddings of shape (b, t, n_embd)
pos_emb = self.wpe(pos) # position embeddings of shape (t, n_embd)
@@ -177,7 +177,7 @@ if __name__ == "__main__":
if args.gpus > 1: x, y = x.shard(GPUS, axis=0), y.shard(GPUS, axis=0)
@TinyJit
@Context(TRAINING=1)
@Tensor.train()
def step(x:Tensor, y:Tensor) -> Tensor:
_, loss = model(x, y)
optimizer.zero_grad()
@@ -204,3 +204,4 @@ if __name__ == "__main__":
top_k = 40
y = model.generate(x, max_new_tokens, temperature=temperature, top_k=top_k)
print(decode(y[0].tolist()))
+2 -2
View File
@@ -1,5 +1,5 @@
# much taken from https://github.com/cloneofsimo/minRF
from tinygrad import Tensor, nn, GlobalCounters, TinyJit, Context
from tinygrad import Tensor, nn, GlobalCounters, TinyJit
from tinygrad.helpers import getenv, trange
from extra.models.llama import Attention, FeedForward, precompute_freqs_cis
@@ -135,7 +135,7 @@ if __name__ == "__main__":
optimizer = nn.optim.Adam(nn.state.get_parameters(model), lr=5e-4)
@TinyJit
@Context(TRAINING=1)
@Tensor.train()
def train_step():
if getenv("OVERFIT"): samples = Tensor.zeros(getenv("BS", 256), dtype='int')
else: samples = Tensor.randint(getenv("BS", 256), high=X_train.shape[0])
+3 -3
View File
@@ -1,6 +1,6 @@
import functools, argparse, pathlib
from tinygrad import Tensor, nn, Device, GlobalCounters, Variable
from tinygrad.helpers import Timing, Profiling, tqdm
from tinygrad.helpers import Timing, Profiling, CI, tqdm
from tinygrad.nn.state import torch_load, get_state_dict
from extra.models.llama import FeedForward, Transformer
from extra.bench_log import BenchEvent, WallTimeEvent
@@ -36,7 +36,7 @@ if __name__ == "__main__":
model = Transformer(n_layers=32, dim=4096, hidden_dim=14336, n_heads=32, n_kv_heads=8, norm_eps=1e-5, vocab_size=32000, feed_forward=functools.partial(MixtureFeedForward, 8), jit=False)
model_state_dict = get_state_dict(model)
for k in (t := tqdm(state, disable=None)):
for k in (t := tqdm(state, disable=CI)):
if 'feed_forward.experts.' in k:
expert_no = int(k.split('feed_forward.experts.')[1].split('.')[0])
device = Device.DEFAULT + ":" + str((expert_no//2)+1)
@@ -44,7 +44,7 @@ if __name__ == "__main__":
device = Device.DEFAULT
t.set_description(f"ram used: {GlobalCounters.mem_used/1e9:5.2f} GB, loading {k} to {device}")
model_state_dict[k].replace(state[k].to(device).half()).realize()
if t.disable: print(f"ram used: {GlobalCounters.mem_used/1e9:5.2f} GB")
if CI: print(f"ram used: {GlobalCounters.mem_used/1e9:5.2f} GB")
from sentencepiece import SentencePieceProcessor
spp = SentencePieceProcessor(model_file=args.weights + "/tokenizer.model")
+6 -6
View File
@@ -1,11 +1,11 @@
import os, random, pickle, queue, struct, math, functools, hashlib, time
from typing import List
from pathlib import Path
from multiprocessing import Queue, Process, shared_memory, connection, Lock
from multiprocessing import Queue, Process, shared_memory, connection, Lock, cpu_count
import numpy as np
from tinygrad import dtypes, Tensor
from tinygrad.helpers import getenv, prod, Context, round_up, tqdm, OSX, NUM_CPU_THREADS
from tinygrad.helpers import getenv, prod, Context, round_up, tqdm, OSX
from tinygrad.nn.state import TensorIO
### ResNet
@@ -131,7 +131,7 @@ def batch_load_resnet(batch_size=64, val=False, shuffle=True, seed=None, pad_fir
else: X = Tensor.empty(*sz, dtype=dtypes.uint8, device=f"disk:/dev/shm/{shm_name}")
Y = [None] * (batch_size*BATCH_COUNT)
for _ in range(NUM_CPU_THREADS.value):
for _ in range(cpu_count()):
p = Process(target=loader_process, args=(q_in, q_out, X, seed))
p.daemon = True
p.start()
@@ -212,7 +212,7 @@ def batch_load_train_bert(BS:int, seed:int|None=None):
rng.shuffle(fs)
train_files.append(fs.pop(0))
cycle_length = min(NUM_CPU_THREADS.value, len(train_files))
cycle_length = min(getenv("NUM_CPU_THREADS", min(os.cpu_count(), 8)), len(train_files))
assert cycle_length > 0, "cycle_length must be greater than 0"
dataset = InterleavedDataset(train_files, cycle_length)
@@ -301,7 +301,7 @@ def batch_load_unet3d(preprocessed_dataset_dir:Path, batch_size:int=6, val:bool=
X = Tensor.empty(*sz, dtype=dtypes.float32, device=f"disk:/dev/shm/{shm_name_x}")
Y = Tensor.empty(*sz, dtype=dtypes.uint8, device=f"disk:/dev/shm/{shm_name_y}")
for _ in range(NUM_CPU_THREADS.value):
for _ in range(cpu_count()):
proc = Process(target=load_unet3d_data, args=(preprocessed_dataset_dir, seed, queue_in, queue_out, X, Y))
proc.daemon = True
proc.start()
@@ -437,7 +437,7 @@ def batch_load_retinanet(dataset, val:bool, base_dir:Path, batch_size:int=32, sh
dataset_iter = iter(image_ids)
try:
for _ in range(NUM_CPU_THREADS.value):
for _ in range(cpu_count()):
proc = Process(
target=load_retinanet_data,
args=(base_dir, val, queue_in, queue_out, imgs, boxes, labels),
+7 -7
View File
@@ -2,7 +2,7 @@ import math
from typing import Union
from tinygrad import Tensor, nn, dtypes
from tinygrad.helpers import prod, argfix, Context, TRAINING
from tinygrad.helpers import prod, argfix, Context
from tinygrad.nn.state import get_parameters
from extra.models.unet import UNetModel
@@ -57,7 +57,7 @@ class EmbeddingBert(nn.Embedding):
def __call__(self, idx:Tensor) -> Tensor:
if idx.numel() == 0: return Tensor.empty(idx.shape+(self.embed_sz,), dtype=self.weight.dtype, device=self.weight.device)
arange_shp, weight_shp, big_shp = (1, 1, self.vocab_sz, 1), (1, 1, self.vocab_sz, self.embed_sz), idx.shape+(self.vocab_sz, self.embed_sz,)
if not hasattr(self, 'arange'): self.arange = Tensor.arange(self.vocab_sz).reshape(arange_shp)
if not hasattr(self, 'arange'): self.arange = Tensor.arange(self.vocab_sz, requires_grad=False, device=self.weight.device).reshape(arange_shp)
arange, idx, vals = self.arange.expand(big_shp), idx.reshape(idx.shape+(1, 1,)).expand(big_shp), self.weight.cast(dtypes.default_float).reshape(weight_shp).expand(big_shp)
return (arange == idx).where(vals, 0).sum(2, dtype=vals.dtype)
@@ -77,15 +77,15 @@ class FrozenBatchNorm2dRetinaNet(nn.BatchNorm2d):
def __init__(self, sz:int, eps=1e-5, affine=True, track_running_stats=True, momentum=0.1):
self.eps, self.track_running_stats, self.momentum = eps, track_running_stats, momentum
self.weight = Tensor.ones(sz, dtype=dtypes.float32).is_param_(False) if affine else None
self.bias = Tensor.zeros(sz, dtype=dtypes.float32).is_param_(False) if affine else None
self.weight = Tensor.ones(sz, dtype=dtypes.float32, requires_grad=False) if affine else None
self.bias = Tensor.zeros(sz, dtype=dtypes.float32, requires_grad=False) if affine else None
if track_running_stats: self.running_mean, self.running_var = Tensor.zeros(sz, dtype=dtypes.float32).is_param_(False), Tensor.ones(sz, dtype=dtypes.float32).is_param_(False)
self.num_batches_tracked = Tensor.zeros(1, dtype=dtypes.long).is_param_(False)
if track_running_stats: self.running_mean, self.running_var = Tensor.zeros(sz, dtype=dtypes.float32, requires_grad=False), Tensor.ones(sz, dtype=dtypes.float32, requires_grad=False)
self.num_batches_tracked = Tensor.zeros(1, dtype=dtypes.long, requires_grad=False)
def __call__(self, x:Tensor) -> Tensor:
batch_mean, batch_var = super().calc_stats(x.cast(dtypes.float32))
if self.track_running_stats and TRAINING:
if self.track_running_stats and Tensor.training:
self.running_mean.assign((1-self.momentum) * self.running_mean + self.momentum * batch_mean.detach().cast(self.running_mean.dtype))
self.running_var.assign((1-self.momentum) * self.running_var + self.momentum * x.numel()/(x.numel()-x.shape[1]) * batch_var.detach().cast(self.running_var.dtype))
self.num_batches_tracked += 1
+8 -7
View File
@@ -358,7 +358,7 @@ def eval_stable_diffusion():
batch = batch.cat(batch[-1:].expand(bs - unpadded_bs, *batch[-1].shape))
return batch, unpadded_bs
@Context(TRAINING=0)
@Tensor.train(mode=False)
def eval_unet(eval_inputs:list[dict], unet:UNetModel, cond_stage:FrozenOpenClipEmbedder, first_stage:AutoencoderKL,
inception:FidInceptionV3, clip:OpenClipEncoder) -> tuple[float, float]:
# Eval is divided into 5 jits, one per model
@@ -498,10 +498,11 @@ def eval_stable_diffusion():
if __name__ == "__main__":
# inference only
Tensor.training = False
models = getenv("MODEL", "resnet,retinanet,unet3d,rnnt,bert").split(",")
with Context(TRAINING=0):
for m in models:
nm = f"eval_{m}"
if nm in globals():
print(f"eval {m}")
globals()[nm]()
for m in models:
nm = f"eval_{m}"
if nm in globals():
print(f"eval {m}")
globals()[nm]()
+8 -7
View File
@@ -1,6 +1,6 @@
# load each model here, quick benchmark
from tinygrad import Tensor, GlobalCounters
from tinygrad.helpers import getenv, Context
from tinygrad.helpers import getenv
import numpy as np
def test_model(model, *inputs):
@@ -59,10 +59,11 @@ def spec_mrcnn():
if __name__ == "__main__":
# inference only for now
with Context(TRAINING=0):
for m in getenv("MODEL", "resnet,retinanet,unet3d,rnnt,bert,mrcnn").split(","):
nm = f"spec_{m}"
if nm in globals():
print(f"testing {m}")
globals()[nm]()
Tensor.training = False
for m in getenv("MODEL", "resnet,retinanet,unet3d,rnnt,bert,mrcnn").split(","):
nm = f"spec_{m}"
if nm in globals():
print(f"testing {m}")
globals()[nm]()
+31 -324
View File
@@ -2,7 +2,7 @@ import os, time, math, functools, random, contextlib
from pathlib import Path
import multiprocessing
from tinygrad import Device, GlobalCounters, Tensor, TinyJit, dtypes, Context
from tinygrad import Device, GlobalCounters, Tensor, TinyJit, dtypes
from tinygrad.helpers import getenv, BEAM, WINO, round_up, diskcache_clear, Profiling, profile_marker, DEBUG
from tinygrad.nn.state import get_parameters, get_state_dict, load_state_dict, safe_load, safe_save
from tinygrad.nn.optim import LAMB, LARS, SGD, OptimizerGroup, Adam, AdamW
@@ -157,7 +157,6 @@ def train_resnet():
# input_std = Tensor([0.229, 0.224, 0.225], device=GPUS, dtype=dtypes.float32).reshape(1, -1, 1, 1)
def normalize(x): return (x.permute([0, 3, 1, 2]) - input_mean).cast(dtypes.default_float)
@TinyJit
@Context(TRAINING=1)
def train_step(X, Y):
optimizer_group.zero_grad()
X = normalize(X)
@@ -171,7 +170,6 @@ def train_resnet():
return loss.realize(), top_1.realize()
@TinyJit
@Context(TRAINING=0)
def eval_step(X, Y):
X = normalize(X)
out = model.forward(X)
@@ -182,11 +180,11 @@ def train_resnet():
def fake_data_get(batch_size):
x = Tensor.zeros(batch_size, 224, 224, 3, dtype=dtypes.uchar).contiguous()
y = [0] * batch_size
return x.shard(GPUS, axis=0).realize(), Tensor(y).shard(GPUS, axis=0), y, None
return x.shard(GPUS, axis=0).realize(), Tensor(y, requires_grad=False).shard(GPUS, axis=0), y, None
def data_get(it):
x, y, cookie = next(it)
return x.shard(GPUS, axis=0).realize(), Tensor(y).shard(GPUS, axis=0), y, cookie
return x.shard(GPUS, axis=0).realize(), Tensor(y, requires_grad=False).shard(GPUS, axis=0), y, cookie
# ** epoch loop **
step_times = []
@@ -194,6 +192,7 @@ def train_resnet():
# ** train loop **
if MLLOGGER and RUNMLPERF:
MLLOGGER.start(key=mllog_constants.EPOCH_START, value=e+1, metadata=dict(epoch_num=e+1))
Tensor.training = True
BEAM.value = TRAIN_BEAM
if INITMLPERF:
@@ -272,6 +271,7 @@ def train_resnet():
eval_loss = 0.0
eval_top_1 = 0
eval_num_samples = 0
Tensor.training = False
BEAM.value = EVAL_BEAM
if INITMLPERF:
@@ -413,7 +413,7 @@ def train_retinanet():
layers_to_train = ["layer4", "layer3", "layer2", "layer1", "conv1"][:trainable_layers]
for k, v in get_state_dict(backbone).items():
if all([not k.startswith(layer) for layer in layers_to_train]):
v.is_param_(False)
v.requires_grad = False
def _data_get(it:Iterator[tuple[Tensor, ...]], val:bool=False):
if val:
@@ -614,7 +614,7 @@ def train_retinanet():
if getenv("RESET_STEP", 1): _train_step.reset()
with Context(TRAINING=0):
with Tensor.train(mode=False):
if not RUNMLPERF:
i, proc = 0, _fake_data_get(EVAL_BS, val=(val:=True))
else:
@@ -784,7 +784,7 @@ def train_unet3d():
return x.shard(GPUS, axis=0).realize(), y.shard(GPUS, axis=0), cookie
@TinyJit
@Context(TRAINING=1)
@Tensor.train()
def train_step(model, x, y):
optim.zero_grad()
@@ -795,10 +795,10 @@ def train_unet3d():
optim.step()
return loss.realize()
@Context(TRAINING=0)
@Tensor.train(mode=False)
def eval_step(model, x, y):
y_hat, y = sliding_window_inference(model, x, y, gpus=GPUS)
y_hat, y = Tensor(y_hat), Tensor(y)
y_hat, y = Tensor(y_hat), Tensor(y, requires_grad=False)
loss = dice_ce_loss(y_hat, y)
score = dice_score(y_hat, y)
return loss.realize(), score.realize()
@@ -919,7 +919,6 @@ def train_rnnt():
pass
@TinyJit
@Context(TRAINING=0)
def eval_step_bert(model, input_ids:Tensor, segment_ids:Tensor, attention_mask:Tensor, masked_positions:Tensor, masked_lm_ids:Tensor,
masked_lm_weights:Tensor, next_sentence_labels:Tensor, GPUS):
for t in [input_ids, segment_ids, attention_mask, masked_positions, masked_lm_ids, masked_lm_weights, next_sentence_labels]:
@@ -1107,7 +1106,6 @@ def train_bert():
MLLOGGER.start(key=mllog_constants.EPOCH_START, value=i*GBS, metadata={"epoch_num": i*GBS})
@TinyJit
@Context(TRAINING=1)
def train_step_bert(input_ids:Tensor, segment_ids:Tensor, attention_mask:Tensor,
masked_positions:Tensor, masked_lm_ids:Tensor, masked_lm_weights:Tensor, next_sentence_labels:Tensor):
for t in [input_ids, segment_ids, attention_mask, masked_positions, masked_lm_ids, masked_lm_weights, next_sentence_labels]:
@@ -1135,6 +1133,7 @@ def train_bert():
while train_data is not None and i < train_steps and not achieved:
if getenv("TRAIN", 1):
Tensor.training = True
BEAM.value = TRAIN_BEAM
st = time.perf_counter()
GlobalCounters.reset()
@@ -1187,6 +1186,7 @@ def train_bert():
eval_lm_accs = []
eval_clsf_accs = []
eval_times = []
Tensor.training = False
BEAM.value = EVAL_BEAM
for j in tqdm(range(max_eval_steps), desc="Evaluating", total=max_eval_steps, disable=BENCHMARK):
@@ -1282,10 +1282,10 @@ def train_bert():
previous_step = i
def train_llama3():
from examples.mlperf.models.flat_llama import FlatTransformer, apply_grad, FP8_DTYPE, MXFP8
from examples.mlperf.models.flat_llama import FlatTransformer, apply_grad, FP8_DTYPE
from examples.llama3 import MODEL_PARAMS
from examples.mlperf.lr_schedulers import CosineAnnealingLRWithWarmup
from examples.mlperf.optim import GradAccClipAdamW, clip_grads
from examples.mlperf.optim import GradAccClipAdamW
INITMLPERF = getenv("INITMLPERF")
RUNMLPERF = getenv("RUNMLPERF")
@@ -1419,7 +1419,10 @@ def train_llama3():
for p in optim.params:
grad_dtype = dtypes.bfloat16 if p.dtype == FP8_DTYPE else p.dtype
p.grad = p.zeros_like(dtype=grad_dtype).contiguous()
if isinstance(p.device, tuple) and p.uop.axis is not None:
p.grad = Tensor.zeros(p.shape, dtype=grad_dtype, device=p.device[0]).shard_(p.device, axis=p.uop.axis).contiguous()
else:
p.grad = Tensor.zeros(p.shape, dtype=grad_dtype, device=p.device).contiguous()
grads = [p.grad for p in optim.params]
scheduler = CosineAnnealingLRWithWarmup(optim, opt_base_learning_rate, opt_end_learning_rate, opt_learning_rate_warmup_steps, opt_learning_rate_decay_steps)
@@ -1434,40 +1437,28 @@ def train_llama3():
load_state_dict(scheduler, safe_load(fn), realize=False)
fp8_amax = [t for ts in model._fp8_amax.values() for t in ts]
fp8_next_amax = [t for ts in model._fp8_next_amax.values() for t in ts] if hasattr(model, "_fp8_next_amax") else []
fp8_grad_amax = [t for ts in model._fp8_grad_amax.values() for t in ts] if hasattr(model, "_fp8_grad_amax") else []
fp8_next_grad_amax = [t for ts in model._fp8_next_grad_amax.values() for t in ts] if hasattr(model, "_fp8_next_grad_amax") else []
fp8_inv_scales = list(model._fp8_inv_scale.values()) + list(model._fp8_next_inv_scale.values())
fp8_inv_scales = list(model._fp8_inv_scale.values())
from tinygrad.nn.state import get_state_dict
model_state = get_state_dict(model)
for wname in model._fp8_inv_scale:
for wname in ["wqkv", "wo", "w13", "w2"]:
w = model_state[wname]
w._inv_scale = model._fp8_inv_scale[wname]
w._next_inv_scale = model._fp8_next_inv_scale[wname]
if optim.master_params:
idx = next(j for j, p in enumerate(optim.params) if p is w)
master = optim.master_params[idx]
inv = w._inv_scale if w._inv_scale.device == master.device else w._inv_scale.to(master.device)
if MXFP8:
from extra.gemm.cdna_asm_gemm import _mx_block_scale
bs = _mx_block_scale(inv.reshape(-1, inv.shape[-1])).reshape(w.shape)
master.assign((master * bs).contiguous())
else:
master.assign((master * inv.reshape(*inv.shape, *([1]*(w.ndim-inv.ndim)))).contiguous())
optim.master_params[idx].assign((optim.master_params[idx] * w._inv_scale.reshape(-1, *([1]*(w.ndim-1)))).contiguous())
# realize everything here
if optim.master_params: Tensor.realize(*optim.master_params)
Tensor.realize(*optim.params, *fp8_inv_scales, *fp8_amax, *fp8_next_amax, *fp8_grad_amax, *fp8_next_grad_amax)
Tensor.realize(*optim.params, *fp8_inv_scales, *fp8_amax, *fp8_grad_amax)
@TinyJit
def minibatch(tokens:Tensor):
for nxt in fp8_next_amax: nxt.assign(0)
for nxt in fp8_next_grad_amax: nxt.assign(0)
if is_dp: tokens = tokens.to(None).shard(device, 0)
if is_mp: tokens = tokens.shard(device)
if not is_sharding: tokens = tokens.to(None)
logits:Tensor = model(tokens[:, :-1], save=bool(SMALL))
logits:Tensor = model(tokens[:, :-1])
if getenv("FAST_CE", 0):
from extra.llama_kernels.fused_ce import fused_ce_loss
loss = fused_ce_loss(logits.cast(dtypes.bfloat16), tokens[:, 1:], label_smoothing=0.0)
@@ -1478,26 +1469,23 @@ def train_llama3():
apply_grad(g, new_g.uop)
loss_cpu = loss.flatten().float().to("CPU")
return loss_cpu.realize(*grads, *fp8_amax, *fp8_next_amax, *fp8_grad_amax, *fp8_next_grad_amax)
return loss_cpu.realize(*grads, *fp8_amax, *fp8_grad_amax)
@TinyJit
def optim_step():
grad_norm = clip_grads(grads, grad_acc, 1.0)
optim.fstep(grads, grad_norm)
grad_norm = optim.fstep(grads)
scheduler.step()
for g in grads: g.assign(0)
for cur, nxt in zip(fp8_amax, fp8_next_amax): cur.assign(nxt)
for cur, nxt in zip(fp8_grad_amax, fp8_next_grad_amax): cur.assign(nxt)
for g in grads: g.assign(g.zeros_like())
lr_cpu = optim.lr.float().to("CPU")
grad_norm_cpu = grad_norm.float().to("CPU")
Tensor.realize(lr_cpu, grad_norm_cpu, *grads, *fp8_inv_scales, *fp8_amax, *fp8_grad_amax)
Tensor.realize(lr_cpu, grad_norm_cpu, *grads, *fp8_inv_scales)
return lr_cpu, grad_norm_cpu
@TinyJit
@Context(TRAINING=0)
@Tensor.train(False)
def eval_step(tokens:Tensor):
if is_dp: tokens = tokens.to(None).shard(device, 0)
if is_mp: tokens = tokens.shard(device)
@@ -1510,7 +1498,7 @@ def train_llama3():
def fake_data(bs, samples):
import numpy as np
for _ in range(samples // bs):
fake_data_np = np.random.randint(0, real_vocab_size, size=(bs, SEQLEN + 1), dtype=np.int32)
fake_data_np = np.random.randint(0, model_params["vocab_size"], size=(bs, SEQLEN + 1), dtype=np.int32)
yield Tensor(fake_data_np, device="NPY")
def get_train_iter():
@@ -1665,287 +1653,6 @@ def train_llama3():
if MLLOGGER and RUNMLPERF:
MLLOGGER.start(key=mllog_constants.BLOCK_START, metadata={mllog_constants.SAMPLES_COUNT: sequences_seen})
def train_gptoss():
from examples.mlperf.models.gpt_oss import GPTOSS, GPT_OSS_20B, apply_grad, FP8_DTYPE
from examples.mlperf.lr_schedulers import CosineAnnealingLRWithWarmup
from examples.mlperf.optim import GradAccClipAdamW, GradAccClipAdamWGroup, clip_grads
BENCHMARK = getenv("BENCHMARK")
config = {}
BASEDIR = config["BASEDIR"] = Path(getenv("BASEDIR", "/raid/datasets/c4-8b/"))
BS = config["BS"] = getenv("BS", 16)
grad_acc = config["GRADIENT_ACC_STEPS"] = getenv("GRADIENT_ACC_STEPS", 1)
GBS = config["GLOBAL_BATCH_SIZE"] = BS * grad_acc
SEED = config["SEED"] = getenv("SEED", 5760)
DATA_SEED = config["DATA_SEED"] = getenv("DATA_SEED", SEED)
SEQLEN = config["SEQLEN"] = getenv("SEQLEN", 8192)
TRAIN_ON_VAL = config["TRAIN_ON_VAL"] = getenv("TRAIN_ON_VAL", 0)
MAX_STEPS = config["MAX_STEPS"] = getenv("MAX_STEPS", 1_200_000)
SAMPLES = config["SAMPLES"] = getenv("SAMPLES", 5_760 if TRAIN_ON_VAL else MAX_STEPS * GBS)
EVAL_SAMPLES = config["EVAL_SAMPLES"] = getenv("EVAL_SAMPLES", 1024)
WARMUP_STEPS = config["WARMUP_STEPS"] = getenv("WARMUP_STEPS", 128)
LR = config["LR"] = getenv("LR", 4e-4 * GBS / 16)
END_LR = config["END_LR"] = getenv("END_LR", 4e-5)
EVAL_FREQ = config["EVAL_FREQ"] = getenv("EVAL_FREQ", 12288)
EVAL_BS = config["EVAL_BS"] = getenv("EVAL_BS", 16)
EVAL_TARGET = config["EVAL_TARGET"] = getenv("EVAL_TARGET", 3.34)
opt_adamw_beta_1 = 0.9
opt_adamw_beta_2 = 0.95
opt_adamw_epsilon = 1e-5
opt_adamw_weight_decay = 0.1
opt_learning_rate_warmup_steps = WARMUP_STEPS
opt_learning_rate_decay_steps = MAX_STEPS - opt_learning_rate_warmup_steps
opt_base_learning_rate = LR
opt_end_learning_rate = END_LR
Tensor.manual_seed(SEED) # seed for weight initialization
# ** init wandb **
WANDB = getenv("WANDB")
if WANDB:
import wandb
wandb_args = {"id": wandb_id, "resume": "must"} if (wandb_id := getenv("WANDB_RESUME", "")) else {}
wandb.init(config=config, **wandb_args, project="MLPerf-gpt-oss")
model_params = GPT_OSS_20B
model_params['vocab_size'] = getenv("VOCAB_SIZE", 128256)
real_vocab_size = model_params['vocab_size']
if (layers:=getenv("LAYERS")) != 0: model_params['n_layers'] = layers
if (experts:=getenv("EXPERTS")) != 0: model_params['n_experts'] = experts
print(f"model parameters: {model_params}")
model = GPTOSS(**model_params, max_context=SEQLEN)
params = get_parameters(model)
if getenv("EMPTYWEIGHT"):
for v in get_parameters(model):
v = v.assign(Tensor.empty(v.shape, dtype=v.dtype))
is_dp = (DP := getenv("DP", 1)) > 1
is_sharding = is_dp
device_count = DP
device = tuple(f"{Device.DEFAULT}:{i}" for i in range(device_count))
model.shard(device, False)
is_offload_optim = bool(getenv("OFFLOAD_OPTIM"))
is_fake_offload = Device.DEFAULT == "NULL"
optim_device = ("CPU" if not is_fake_offload else "NULL:99") if is_offload_optim else None
params_wd = [p for p in params if p.ndim >= 3]
params_no_wd = [p for p in params if p.ndim < 3]
optim = GradAccClipAdamWGroup(
GradAccClipAdamW(params_wd, lr=0.0, b1=opt_adamw_beta_1, b2=opt_adamw_beta_2, eps=opt_adamw_epsilon, weight_decay=opt_adamw_weight_decay, grad_acc=grad_acc, device=optim_device),
GradAccClipAdamW(params_no_wd, lr=0.0, b1=opt_adamw_beta_1, b2=opt_adamw_beta_2, eps=opt_adamw_epsilon, weight_decay=0.0, grad_acc=grad_acc, device=optim_device),
)
for p in optim.params:
grad_dtype = dtypes.bfloat16 if p.dtype == FP8_DTYPE else p.dtype
p.grad = p.zeros_like(dtype=grad_dtype).contiguous()
grads = [p.grad for p in optim.params]
from extra.gemm.cdna_asm_gemm import _mx_block_scale
model_state = get_state_dict(model)
def _scale_key(n):
if "." in n and (c:=f"{(b:=n.rsplit('.',1))[0]}_scale.{b[1]}") in model_state: return c
return f"{n}_scale"
fp8_scale_names = {n: _scale_key(n) for n, t in model_state.items() if t.dtype == FP8_DTYPE}
fp8_inv_scales = [model_state[sname] for sname in fp8_scale_names.values()]
for wname, sname in fp8_scale_names.items():
w, scale = model_state[wname], model_state[sname]
w._inv_scale = scale
if optim.master_params:
master = optim.master_params[next(j for j, p in enumerate(optim.params) if p is w)]
inv = scale if scale.device == master.device else scale.to(master.device)
bs = _mx_block_scale(inv.reshape(-1, inv.shape[-1])).reshape(w.shape)
master.assign((master * bs).contiguous())
scheduler = CosineAnnealingLRWithWarmup(optim, opt_base_learning_rate, opt_end_learning_rate, opt_learning_rate_warmup_steps, opt_learning_rate_decay_steps)
if optim.master_params:
for m in optim.master_params: m.realize()
Tensor.realize(*optim.params, *fp8_inv_scales)
@TinyJit
@Context(TRAINING=1)
def minibatch(tokens:Tensor):
if is_dp: tokens = tokens.to(None).shard(device, 0)
if not is_sharding: tokens = tokens.to(None)
logits:Tensor = model(tokens[:, :-1], save=True)
loss = logits.sparse_categorical_crossentropy(tokens[:, 1:])
for g, new_g in zip(grads, loss.gradient(*optim.params)):
apply_grad(g, new_g.uop)
loss_cpu = loss.flatten().float().to("CPU")
return loss_cpu.realize(*grads)
@TinyJit
def optim_step():
grad_norm = clip_grads(grads, grad_acc, 1.0)
optim.fstep(grads, grad_norm)
scheduler.step()
for g in grads: g.assign(0)
lr_cpu = optim.lr.float().to("CPU")
grad_norm_cpu = grad_norm.float().to("CPU")
Tensor.realize(lr_cpu, grad_norm_cpu, *grads, *fp8_inv_scales)
return lr_cpu, grad_norm_cpu
@TinyJit
@Context(TRAINING=0)
def eval_step(tokens:Tensor):
if is_dp: tokens = tokens.to(None).shard(device, 0)
if not is_sharding: tokens = tokens.to(None)
logits:Tensor = model(tokens[:, :-1])
loss = logits.sparse_categorical_crossentropy(tokens[:, 1:])
return loss.flatten().float().to("CPU")
# ** data iters **
def fake_data(bs, samples):
import numpy as np
for _ in range(samples // bs):
fake_data_np = np.random.randint(0, real_vocab_size, size=(bs, SEQLEN + 1), dtype=np.int32)
yield Tensor(fake_data_np, device="NPY")
def get_train_iter():
if getenv("FAKEDATA", 0):
return fake_data(BS, SAMPLES)
else:
from examples.mlperf.dataloader import batch_load_llama3
return batch_load_llama3(BS, SAMPLES, SEQLEN, BASEDIR, seed=DATA_SEED, val=bool(TRAIN_ON_VAL), small=True)
if getenv("FAKEDATA", 0):
eval_dataset = None
else:
from examples.mlperf.dataloader import get_llama3_dataset
eval_dataset = get_llama3_dataset(EVAL_SAMPLES, SEQLEN, BASEDIR, val=True, small=True)
def get_eval_iter():
if eval_dataset is None:
return fake_data(EVAL_BS, EVAL_SAMPLES)
from examples.mlperf.dataloader import iterate_llama3_dataset
return iterate_llama3_dataset(eval_dataset, EVAL_BS)
num_params = sum(p.numel() for p in params) - model_params["vocab_size"]*model_params["dim"]
train_iter = get_train_iter()
i, sequences_seen = 0, 0
step_times = []
while i < MAX_STEPS:
GlobalCounters.reset()
actual_gbs = GBS if i >= 2 else BS
if getenv("TRAIN", 1):
profile_marker(f"train @ {i}")
st = time.perf_counter()
stopped = False
losses, data_time, dev_time = [], 0, 0
for _ in range(grad_acc if i >= 2 else 1):
ist = time.perf_counter()
try: tokens = next(train_iter)
except StopIteration:
stopped = True
break
mst = time.perf_counter()
data_time += mst - ist
losses.append(minibatch(tokens).item())
dev_time += time.perf_counter() - mst
if stopped: break
gt = time.perf_counter()
ret = optim_step()
lr, grad_norm = ret[0].item(), ret[1].item()
et = time.perf_counter()
loss = sum(losses) / len(losses)
optim_time = et - gt
dev_time += optim_time
step_time = et - st
gbs_time = gt - st
if BENCHMARK: step_times.append(step_time)
i += 1
sequences_seen += actual_gbs
mem_gb = GlobalCounters.mem_used / 1e9
gflops = GlobalCounters.global_ops / 1e9 / dev_time
mfu = ((6 * num_params * SEQLEN * GBS) / (dev_time * device_count * 4.6e15)) * 100
tqdm.write(
f"{i:5} {step_time:.3f} s step, {gbs_time:.3f} s gbs, {optim_time:.3f} s optim, {data_time:.3f} s data, {loss:.4f} loss, " \
f"{lr:.12f} LR, {grad_norm:.6f} grad_norm, {mem_gb:.2f} GB used, {gflops:9.2f} GFLOPS, {mfu:5.2f}% MFU")
if DEBUG >= 1: tqdm.write(" mem per device: " + ', '.join(f"{dev}: {mem/1e9:.2f} GB" for dev, mem in sorted(GlobalCounters.mem_used_per_device.items())))
if WANDB:
wandb.log({
"train/loss": loss,
"train/lr": lr,
"train/grad_norm": grad_norm,
"train/step_time": step_time,
"train/gbs_time": gbs_time,
"train/optim_time": optim_time,
"train/dev_time": dev_time,
"train/data_time": data_time,
"train/mem": mem_gb,
"train/GFLOPS": gflops,
"train/MFU": mfu,
"train/sequences_seen": sequences_seen
})
if (ckpt_freq := getenv("CKPT")) and (i % ckpt_freq == 0 and (i != 1 or ckpt_freq == 1)):
tqdm.write("saving checkpoint")
if not os.path.exists(ckpt_dir := "./ckpts"): os.mkdir(ckpt_dir)
fn = f"{ckpt_dir}/gptoss_{i}.safe"
safe_save(get_state_dict(model), fn)
tqdm.write("saving optim checkpoint")
fn = f"{ckpt_dir}/gptoss_{i}_optim.safe"
safe_save(get_state_dict(scheduler), fn)
if i == BENCHMARK:
median_step_time = sorted(step_times)[BENCHMARK // 2]
estimated_steps = MAX_STEPS
estimated_total_minutes = int(median_step_time * estimated_steps / 60)
print(f"Estimated training time: {estimated_total_minutes // 60}h{estimated_total_minutes % 60}m")
print(f"epoch global_ops: {GlobalCounters.global_ops:_}, "
f"epoch global_mem: {GlobalCounters.global_mem:_}")
if (sequences_seen // EVAL_FREQ != (sequences_seen - actual_gbs) // EVAL_FREQ and (i != 1 or EVAL_FREQ == 1)) or (BENCHMARK and i == BENCHMARK):
if EVAL_BS == 0: return
tqdm.write(f"evaluating after {sequences_seen} sequences")
profile_marker(f"eval @ {i}")
# run eval
eval_losses = []
eval_iter = get_eval_iter()
tqdm.write(f"evaluating {EVAL_SAMPLES//EVAL_BS} batches of {EVAL_BS} sequences")
for j,tokens in tqdm(enumerate(eval_iter), total=EVAL_SAMPLES//EVAL_BS):
eval_losses += eval_step(tokens).tolist()
if BENCHMARK and (j+1) == min(BENCHMARK, EVAL_SAMPLES//EVAL_BS):
return
log_perplexity = sum(eval_losses) / len(eval_losses)
tqdm.write(f"eval log perplexity: {log_perplexity:.4f}")
if WANDB:
wandb.log({"eval/log_perplexity": log_perplexity, "eval/sequences_seen": sequences_seen})
if log_perplexity < EVAL_TARGET:
tqdm.write(f"target achieved after {sequences_seen} sequences")
if getenv("CKPT"):
if not os.path.exists(ckpt_dir := "./ckpts"): os.mkdir(ckpt_dir)
fn = f"{ckpt_dir}/gptoss.safe"
safe_save(get_state_dict(model), fn)
break
def train_stable_diffusion():
from extra.models.unet import UNetModel
from examples.mlperf.dataloader import batch_load_train_stable_diffusion
@@ -2024,7 +1731,7 @@ def train_stable_diffusion():
# move to CPU first so more GPU bufs aren't created (can trigger OOM)
for k,v in ckpt.items(): ckpt[k] = v.detach().to("CPU")
Tensor.realize(*[v for v in ckpt.values()])
for k,v in ckpt.items(): ckpt[k] = v.cast(v.dtype).contiguous()
for k,v in ckpt.items(): ckpt[k] = v.cast(v.dtype.base).contiguous()
Tensor.realize(*[v for v in ckpt.values()])
return ckpt
@@ -2091,7 +1798,7 @@ if __name__ == "__main__":
elif getenv("RUNMLPERF"): bench_log_manager = WallTimeEvent(BenchEvent.MLPERF_RUN)
else: bench_log_manager = contextlib.nullcontext()
with Context(TRAINING=1):
with Tensor.train():
for m in getenv("MODEL", "resnet,retinanet,unet3d,rnnt,bert,maskrcnn,stable_diffusion").split(","):
nm = f"train_{m}"
if nm in globals():
+143 -267
View File
@@ -2,8 +2,9 @@ import math, os
if __name__ == "__main__":
os.environ["DEFAULT_FLOAT"] = "bfloat16"
os.environ["OPTIM_DTYPE"] = "bfloat16"
if "DEV" not in os.environ: os.environ["DEV"] = "NULL::gfx950"
if "DEV" not in os.environ: os.environ["DEV"] = "NULL"
# CDNA
os.environ["EMULATE"] = "AMD_CDNA4"
os.environ["DEVICE_IN_FUNCTION_BUG"] = "1"
os.environ["ALL2ALL"] = "1"
os.environ["USE_ATOMICS"] = "1"
@@ -12,7 +13,7 @@ if __name__ == "__main__":
if "ASM_GEMM" not in os.environ:
os.environ["ASM_GEMM"] = "1"
from tinygrad import Tensor, nn, function, getenv, dtypes, TinyJit
from tinygrad.helpers import Timing, colored, GlobalCounters, profile_marker, round_up
from tinygrad.helpers import Timing, colored, GlobalCounters, profile_marker
from tinygrad.uop.ops import Ops, UOp
from extra.models.llama import apply_rotary_emb, precompute_freqs_cis
from extra.llama_kernels.rmsnorm import rmsnorm
@@ -22,10 +23,6 @@ ASM_GEMM = getenv("ASM_GEMM", 0)
FUSED_INPUT_QUANTIZE = getenv("FUSED_INPUT_QUANTIZE", 0)
FUSED_ADD_NORM_MUL_QUANTIZE = getenv("FUSED_ADD_NORM_MUL_QUANTIZE", 0)
FUSED_SILU_W13 = getenv("FUSED_SILU_W13", 0)
SPLIT_W13 = getenv("SPLIT_W13", 0)
COLUMNWISE_WEIGHT_SCALE = getenv("COLUMNWISE_WEIGHT_SCALE", 0)
MXFP8 = getenv("MXFP8", 0)
MXFP4 = getenv("MXFP4", 0)
FP8_DTYPE = dtypes.fp8e4m3
FP8_GRAD_DTYPE = dtypes.fp8e5m2
@@ -38,93 +35,58 @@ def quantize_fp8(x:Tensor, amax_state:Tensor|None=None):
return x_clamped.cast(FP8_DTYPE), scale.float().reciprocal(), new_amax
def matmul(x:Tensor, w:Tensor, fp8:bool=True, amax_x:Tensor|None=None, w_inv_scale:Tensor|None=None,
x_fp8:Tensor|None=None, grad_amax_state:Tensor|None=None, next_grad_amax_state:Tensor|None=None, x_prequant_mx:tuple|None=None,
next_amax_x:Tensor|None=None) -> tuple[Tensor,...]:
x_fp8:Tensor|None=None, x_scale:Tensor|None=None, x_new_amax:Tensor|None=None,
grad_amax_state:Tensor|None=None) -> tuple[Tensor,...]:
if not fp8:
if ASM_GEMM:
from extra.gemm.cdna_asm_gemm import can_use_asm_gemm, asm_gemm
if can_use_asm_gemm(x, w.T): return (asm_gemm(x, w.T),)
return (x @ w.T,)
if MXFP4:
assert x is not None, "MXFP4 matmul requires an unquantized input"
from extra.gemm.cdna_asm_gemm import asm_gemm, can_use_asm_gemm
if can_use_asm_gemm(x, w.T): return (asm_gemm(x, w.T, mxfp4=True),)
return (x @ w.T,)
assert w_inv_scale is not None, "fp8 matmul requires w_inv_scale (weights must be stored in fp8 with per-tensor scale)"
if MXFP8:
from extra.gemm.cdna_asm_gemm import asm_gemm, quantize_mxfp8, mx_pack, can_use_asm_gemm, _mx_block_scale
if x_prequant_mx is not None: x_q, x_e8, x_si = x_prequant_mx # fused producer already quantized (2d)
else: x_q, x_e8, x_si = quantize_mxfp8(x.reshape(-1, x.shape[-1]))
l_shape = x.shape[:-1] if x is not None else x_q.shape[:-1]
if can_use_asm_gemm(x_q, w.T):
out = asm_gemm(x_q, w.T, mx=True, mx_scales=(x_si, x_e8, mx_pack(w_inv_scale), w_inv_scale),
mx_w_stored=True).reshape(*l_shape, w.shape[0])
else:
x_phys = (x_q.cast(dtypes.bfloat16) * _mx_block_scale(x_e8)).reshape(*l_shape, x_q.shape[-1])
out = x_phys @ (w.cast(dtypes.bfloat16) * _mx_block_scale(w_inv_scale)).T
return out, x_q
if x_fp8 is None:
if FUSED_INPUT_QUANTIZE:
if FUSED_INPUT_QUANTIZE and amax_x is not None:
from extra.llama_kernels.quantize_fp8_delayed import quantize_fp8_delayed
x_fp8, _ = quantize_fp8_delayed(x, amax_x, next_amax_x, FP8_DTYPE)
x_fp8, x_scale, x_new_amax, _ = quantize_fp8_delayed(x, amax_x, FP8_DTYPE)
else:
x_fp8, _, new_amax_x = quantize_fp8(x, amax_state=amax_x)
next_amax_x.assign(new_amax_x)
x_fp8, x_scale, x_new_amax = quantize_fp8(x, amax_state=amax_x)
if ASM_GEMM:
from extra.gemm.cdna_asm_gemm import can_use_asm_gemm, asm_gemm
if can_use_asm_gemm(x_fp8, w.T):
assert amax_x is not None
if COLUMNWISE_WEIGHT_SCALE:
out = asm_gemm(x_fp8, w.T, x_scale=amax_x, grad_amax_state=grad_amax_state,
next_grad_amax_state=next_grad_amax_state, w_post_scale=w_inv_scale)
else:
out = asm_gemm(x_fp8, w.T, x_scale=amax_x, w_scale=w_inv_scale, grad_amax_state=grad_amax_state,
next_grad_amax_state=next_grad_amax_state)
return out, x_fp8
return (x_fp8.dot(w.T, dtype=dtypes.float) * ((amax_x.float() + 1e-8) / FP8_MAX) * w_inv_scale).cast(dtypes.bfloat16), x_fp8
return asm_gemm(x_fp8, w.T, x_scale=x_scale, w_scale=w_inv_scale, grad_amax_state=grad_amax_state), x_new_amax, x_fp8, w
return x_fp8.dot(w.T, dtype=dtypes.float) * x_scale * w_inv_scale, x_new_amax, x_fp8, w
def norm_quantize_matmul(x:Tensor, norm:Tensor, w:Tensor, w_inv_scale:Tensor, eps:float, amax_x:Tensor,
next_amax_x:Tensor, grad_amax_state:Tensor, next_grad_amax_state:Tensor):
if FUSED_ADD_NORM_MUL_QUANTIZE and not MXFP4:
def norm_quantize_matmul(x:Tensor, norm:Tensor, w:Tensor, w_inv_scale:Tensor, eps:float, amax_x:Tensor, grad_amax_state:Tensor):
if FUSED_ADD_NORM_MUL_QUANTIZE:
from extra.llama_kernels.fused_rmsnorm_mul_quantize_fp8 import fused_rmsnorm_mul_quantize_fp8
x_fp8, x_normed, rrms = fused_rmsnorm_mul_quantize_fp8(x, norm, amax_x, eps, FP8_DTYPE, next_amax_x)
out, *ret = matmul(None, w, w_inv_scale=w_inv_scale, x_fp8=x_fp8, amax_x=amax_x,
grad_amax_state=grad_amax_state, next_grad_amax_state=next_grad_amax_state)
x_fp8, x_inv_scale, new_amax, x_normed, rrms = fused_rmsnorm_mul_quantize_fp8(x, norm, amax_x, eps, FP8_DTYPE)
out, *ret = matmul(None, w, w_inv_scale=w_inv_scale, x_fp8=x_fp8, x_scale=x_inv_scale, x_new_amax=new_amax, grad_amax_state=grad_amax_state)
return out, x_normed, rrms, ret
x_normed, rrms = rmsnorm(x, eps)
out, *ret = matmul(x_normed * norm, w, amax_x=amax_x, w_inv_scale=w_inv_scale, grad_amax_state=grad_amax_state,
next_grad_amax_state=next_grad_amax_state, next_amax_x=next_amax_x)
out, *ret = matmul(x_normed * norm, w, amax_x=amax_x, w_inv_scale=w_inv_scale, grad_amax_state=grad_amax_state)
return out, x_normed, rrms, ret
def add_norm_quantize_matmul(x:Tensor, residual:Tensor, norm:Tensor, w:Tensor, w_inv_scale:Tensor, eps:float, amax_x:Tensor,
next_amax_x:Tensor, grad_amax_state:Tensor|None=None, next_grad_amax_state:Tensor|None=None):
if FUSED_ADD_NORM_MUL_QUANTIZE and not MXFP4:
def add_norm_quantize_matmul(x:Tensor, residual:Tensor, norm:Tensor, w:Tensor, w_inv_scale:Tensor, eps:float, amax_x:Tensor):
if FUSED_ADD_NORM_MUL_QUANTIZE:
from extra.llama_kernels.fused_rmsnorm_mul_quantize_fp8 import fused_add_rmsnorm_mul_quantize_fp8
x_fp8, h, x_normed, rrms = fused_add_rmsnorm_mul_quantize_fp8(x, residual, norm, amax_x, eps, FP8_DTYPE, next_amax_x)
out, *ret = matmul(None, w, w_inv_scale=w_inv_scale, x_fp8=x_fp8, amax_x=amax_x,
grad_amax_state=grad_amax_state, next_grad_amax_state=next_grad_amax_state)
x_fp8, x_inv_scale, new_amax, h, x_normed, rrms = fused_add_rmsnorm_mul_quantize_fp8(x, residual, norm, amax_x, eps, FP8_DTYPE)
out, *ret = matmul(None, w, w_inv_scale=w_inv_scale, x_fp8=x_fp8, x_scale=x_inv_scale, x_new_amax=new_amax)
return out, h, x_normed, rrms, ret
h = x + residual
x_normed, rrms = rmsnorm(h, eps)
out, *ret = matmul(x_normed * norm, w, amax_x=amax_x, w_inv_scale=w_inv_scale, grad_amax_state=grad_amax_state,
next_grad_amax_state=next_grad_amax_state, next_amax_x=next_amax_x)
out, *ret = matmul(x_normed * norm, w, amax_x=amax_x, w_inv_scale=w_inv_scale)
return out, h, x_normed, rrms, ret
def silu_w13_quantize_matmul(x_w13:Tensor, w2:Tensor, s_2:Tensor,
amax_x2:Tensor, next_amax_x2:Tensor,
grad_amax_xw13:Tensor, next_grad_amax_xw13:Tensor,
grad_amax_xout:Tensor, next_grad_amax_xout:Tensor):
if FUSED_SILU_W13 and not MXFP4:
amax_x2:Tensor,
grad_amax_xw13:Tensor, grad_amax_xout:Tensor):
if FUSED_SILU_W13:
from extra.llama_kernels.cast_amax import fused_quantize_fp8_w13
x2_fp8 = fused_quantize_fp8_w13(x_w13, amax_x2, FP8_DTYPE, grad_amax_state=grad_amax_xw13,
next_grad_amax_state=next_grad_amax_xw13, amax_out=next_amax_x2)
out, *ret = matmul(None, w2, w_inv_scale=s_2, x_fp8=x2_fp8, amax_x=amax_x2,
grad_amax_state=grad_amax_xout, next_grad_amax_state=next_grad_amax_xout)
x2_fp8, x2_inv_scale, new_amax_x2 = fused_quantize_fp8_w13(x_w13, amax_x2, FP8_DTYPE, grad_amax_state=grad_amax_xw13)
out, *ret = matmul(None, w2, w_inv_scale=s_2, x_fp8=x2_fp8, x_scale=x2_inv_scale, x_new_amax=new_amax_x2, grad_amax_state=grad_amax_xout)
return out, ret
hidden = x_w13.shape[-1] // 2
x_w1, x_w3 = x_w13[..., :hidden], x_w13[..., hidden:]
out, *ret = matmul(x_w1.silu() * x_w3, w2, amax_x=amax_x2, w_inv_scale=s_2, grad_amax_state=grad_amax_xout,
next_grad_amax_state=next_grad_amax_xout, next_amax_x=next_amax_x2)
out, *ret = matmul(x_w1.silu() * x_w3, w2, amax_x=amax_x2, w_inv_scale=s_2, grad_amax_state=grad_amax_xout)
return out, ret
class FlatTransformer:
@@ -141,16 +103,13 @@ class FlatTransformer:
scaled_std = 0.02 / math.sqrt(2 * n_layers)
# Attention
self.wqkv, s_qkv = self.lin_per_layer(dim, self.n_heads * self.head_dim + self.n_kv_heads * self.head_dim * 2)
self.wo, s_o = self.lin_per_layer(self.n_heads * self.head_dim, dim, std=scaled_std)
self._init_inv_scales = [] # populated by lin_per_layer
self.wqkv = self.lin_per_layer(dim, self.n_heads * self.head_dim + self.n_kv_heads * self.head_dim * 2)
self.wo = self.lin_per_layer(self.n_heads * self.head_dim, dim, std=scaled_std)
# FeedForward
if SPLIT_W13:
self.w1, s_1 = self.lin_per_layer(dim, hidden_dim)
self.w3, s_3 = self.lin_per_layer(dim, hidden_dim)
else:
self.w13, s_13 = self.lin_per_layer(dim, hidden_dim * 2)
self.w2, s_2 = self.lin_per_layer(hidden_dim, dim, std=scaled_std)
self.w13 = self.lin_per_layer(dim, hidden_dim * 2)
self.w2 = self.lin_per_layer(hidden_dim, dim, std=scaled_std)
self.norm_eps = norm_eps
self.attention_norm = Tensor.ones(n_layers, dim).contiguous()
@@ -161,122 +120,93 @@ class FlatTransformer:
self.tok_embeddings = nn.Embedding(vocab_size, dim)
self.tok_embeddings.weight = Tensor.normal(vocab_size, dim, mean=0.0, std=0.02, dtype=dtypes.bfloat16)
self.output = Tensor.normal(1, vocab_size, dim, mean=0.0, std=0.02, dtype=dtypes.bfloat16)
self.freqs_cis = precompute_freqs_cis(dim // n_heads, max_context * 2, rope_theta).clone().is_param_(False)
self.freqs_cis = precompute_freqs_cis(dim // n_heads, max_context * 2, rope_theta).contiguous().requires_grad_(False)
def _amax(): return Tensor.full((), FP8_MAX, dtype=dtypes.float32).contiguous().is_param_(False)
names = ["xqkv", "xo", "x2"]
names += ["x1", "x3"] if SPLIT_W13 else ["x13"]
def _amax(): return Tensor.full((), FP8_MAX, dtype=dtypes.float32).contiguous().requires_grad_(False)
names = ["xqkv", "xo", "x13", "x2"]
self._fp8_amax = {name: [_amax() for _ in range(n_layers)] for name in names}
self._fp8_next_amax = {name: [_amax() for _ in range(n_layers)] for name in names}
grad_names = ["xqkv", "xo", "xout"]
grad_names += ["xw1", "xw3"] if SPLIT_W13 else ["xw13"]
grad_names = ["xqkv", "xo", "xw13", "xout"]
self._fp8_grad_amax = {name: [_amax() for _ in range(n_layers)] for name in grad_names}
self._fp8_next_grad_amax = {name: [_amax() for _ in range(n_layers)] for name in grad_names}
w_scales = [("wqkv", s_qkv), ("wo", s_o), ("w2", s_2)]
w_scales += [("w1", s_1), ("w3", s_3)] if SPLIT_W13 else [("w13", s_13)]
self._fp8_inv_scale = {name: (s if MXFP8 else s.float()).contiguous().is_param_(False) for name, s in w_scales}
self._fp8_next_inv_scale = {name: (s if MXFP8 else s.float()).contiguous().is_param_(False) for name, s in w_scales}
w_names = ["wqkv", "wo", "w13", "w2"]
self._fp8_inv_scale = {wname: inv_scales.float().contiguous().requires_grad_(False)
for wname, inv_scales in zip(w_names, self._init_inv_scales)}
del self._init_inv_scales
def lin_per_layer(self, in_features:int, out_features:int, std:float=0.02, w:Tensor|None=None):
if w is None:
if getenv("ZEROS"): w = Tensor.zeros(self.n_layers, out_features, in_features)
else: w = Tensor.normal(self.n_layers, out_features, in_features, mean=0.0, std=std)
if MXFP8:
from extra.gemm.cdna_asm_gemm import quantize_mxfp8
w_q, w_e8, _ = quantize_mxfp8(w.reshape(self.n_layers * out_features, in_features))
return w_q.reshape(self.n_layers, out_features, in_features), w_e8.reshape(self.n_layers, out_features, in_features // 32)
if MXFP4:
# FP4 is produced dynamically so optimizer updates always start from the current BF16 weight.
return w.cast(dtypes.bfloat16), Tensor.ones(self.n_layers)
amax = (w.abs().max(axis=2) if COLUMNWISE_WEIGHT_SCALE else w.abs().flatten(1).max(1)).detach()
def lin_per_layer(self, in_features:int, out_features:int, std:float=0.02):
if getenv("ZEROS"): w = Tensor.zeros(self.n_layers, out_features, in_features)
else: w = Tensor.normal(self.n_layers, out_features, in_features, mean=0.0, std=std)
amax = w.abs().flatten(1).max(1).detach()
scale = FP8_MAX / (amax + 1e-8)
inv_scale = (amax + 1e-8) / FP8_MAX
scale_b = scale.reshape(self.n_layers, out_features, 1) if COLUMNWISE_WEIGHT_SCALE else scale.reshape(-1, 1, 1)
return (w * scale_b).clamp(-FP8_MAX, FP8_MAX).cast(FP8_DTYPE), inv_scale
self._init_inv_scales.append((amax + 1e-8) / FP8_MAX)
return (w * scale.reshape(-1, 1, 1)).clamp(-FP8_MAX, FP8_MAX).cast(FP8_DTYPE)
def attention(self, x:Tensor, freqs_cis:Tensor, *, attention_norm:Tensor, wqkv:Tensor, wo:Tensor,
def attention(self, x:Tensor, freqs_cis:Tensor, attention_norm:Tensor, wqkv:Tensor, wo:Tensor,
amax_xqkv:Tensor, amax_xo:Tensor, s_qkv:Tensor, s_o:Tensor,
next_amax_xqkv:Tensor, next_amax_xo:Tensor,
grad_amax_xqkv:Tensor, grad_amax_xo:Tensor, next_grad_amax_xqkv:Tensor, next_grad_amax_xo:Tensor):
grad_amax_xqkv:Tensor, grad_amax_xo:Tensor):
bsz, seqlen, _ = x.shape
saves = []
new_amaxs, saves = [], []
xqkv, x_normed, rrms, s = norm_quantize_matmul(x, attention_norm, wqkv, s_qkv, self.norm_eps,
amax_x=amax_xqkv, grad_amax_state=grad_amax_xqkv,
next_grad_amax_state=next_grad_amax_xqkv, next_amax_x=next_amax_xqkv)
saves.extend([x_normed, rrms, *s, xqkv])
xqkv, x_normed, rrms, ret = norm_quantize_matmul(x, attention_norm, wqkv, s_qkv, self.norm_eps,
amax_x=amax_xqkv, grad_amax_state=grad_amax_xqkv)
saves.extend([x_normed, rrms])
new_amaxs.extend(ret[:1])
saves.extend(ret[1:] + [xqkv])
xqkv = xqkv.reshape(bsz, seqlen, self.n_kv_heads, self.n_rep + 2, self.head_dim)
xq = xqkv[:, :, :, :self.n_rep].reshape(bsz, seqlen, self.n_heads, self.head_dim)
xk = xqkv[:, :, :, self.n_rep].reshape(bsz, seqlen, self.n_kv_heads, self.head_dim)
xv = xqkv[:, :, :, self.n_rep+1].reshape(bsz, seqlen, self.n_kv_heads, self.head_dim)
xq, xk = apply_rotary_emb(xq, xk, freqs_cis)
xq, xk, xv = xq.cast(dtypes.bfloat16), xk.cast(dtypes.bfloat16), xv.cast(dtypes.bfloat16)
if getenv("HK_FLASH_ATTENTION"):
from extra.thunder.amd.fa import flash_attention, fused_qkv_rope
xq, xk, xv = fused_qkv_rope(xqkv, freqs_cis, self.n_heads, self.n_kv_heads, self.head_dim)
attn, *save = flash_attention(xq, xk, xv, is_causal=True, write_flat=True)
from extra.thunder.amd.fa import flash_attention
attn, *save = flash_attention(xq, xk, xv, is_causal=True)
saves.extend(save)
else:
xqkv = xqkv.reshape(bsz, seqlen, self.n_kv_heads, self.n_rep + 2, self.head_dim)
xq = xqkv[:, :, :, :self.n_rep].reshape(bsz, seqlen, self.n_heads, self.head_dim)
xk = xqkv[:, :, :, self.n_rep].reshape(bsz, seqlen, self.n_kv_heads, self.head_dim)
xv = xqkv[:, :, :, self.n_rep+1].reshape(bsz, seqlen, self.n_kv_heads, self.head_dim)
xq, xk = apply_rotary_emb(xq, xk, freqs_cis)
xq, xk, xv = xq.cast(dtypes.bfloat16), xk.cast(dtypes.bfloat16), xv.cast(dtypes.bfloat16)
xq, xk, xv = xq.transpose(1, 2), xk.transpose(1, 2), xv.transpose(1, 2)
attn = xq.scaled_dot_product_attention(xk, xv, is_causal=True, enable_gqa=True).transpose(1, 2)
attn = attn.reshape(bsz, seqlen, -1)
out, *s = matmul(attn, wo, amax_x=amax_xo, w_inv_scale=s_o, grad_amax_state=grad_amax_xo,
next_grad_amax_state=next_grad_amax_xo, next_amax_x=next_amax_xo)
saves.extend([*s, out])
return out, saves
out, *ret = matmul(attn, wo, amax_x=amax_xo, w_inv_scale=s_o, grad_amax_state=grad_amax_xo)
new_amaxs.extend(ret[:1])
saves.extend(ret[1:] + [out])
return (out, *new_amaxs, *saves)
def feed_forward(self, x:Tensor, residual:Tensor, **kwargs):
saves = []
def feed_forward(self, x:Tensor, residual:Tensor, ffn_norm:Tensor, w13:Tensor, w2:Tensor,
amax_x13:Tensor, amax_x2:Tensor, s_13:Tensor, s_2:Tensor,
grad_amax_xw13:Tensor, grad_amax_xout:Tensor):
new_amaxs, saves = [], []
if SPLIT_W13:
h = x + residual
x_normed, rrms = rmsnorm(h, self.norm_eps)
saves.extend([x_normed, rrms])
inp = x_normed * kwargs["ffn_norm"]
x_w1, *s = matmul(inp, kwargs["w1"], amax_x=kwargs["amax_x1"], w_inv_scale=kwargs["s_1"],
grad_amax_state=kwargs["grad_amax_xw1"], next_grad_amax_state=kwargs["next_grad_amax_xw1"],
next_amax_x=kwargs["next_amax_x1"])
saves.extend([*s, x_w1])
x_w3, *s = matmul(inp, kwargs["w3"], amax_x=kwargs["amax_x3"], w_inv_scale=kwargs["s_3"],
grad_amax_state=kwargs["grad_amax_xw3"], next_grad_amax_state=kwargs["next_grad_amax_xw3"],
next_amax_x=kwargs["next_amax_x3"])
saves.extend([*s, x_w3])
if FUSED_SILU_W13 and MXFP8:
from extra.llama_kernels.fused_silu_mul_quantize_mxfp8 import fused_silu_mul_quantize_mxfp8
aq, ae8, asi = fused_silu_mul_quantize_mxfp8(x_w1.reshape(-1, x_w1.shape[-1]), x_w3.reshape(-1, x_w3.shape[-1]))
out, *s = matmul(None, kwargs["w2"], x_prequant_mx=(aq, ae8, asi), amax_x=kwargs["amax_x2"],
w_inv_scale=kwargs["s_2"], grad_amax_state=kwargs["grad_amax_xout"],
next_grad_amax_state=kwargs["next_grad_amax_xout"], next_amax_x=kwargs["next_amax_x2"])
out = out.reshape(*x_w1.shape[:-1], kwargs["w2"].shape[0])
else:
out, *s = matmul(x_w1.silu() * x_w3, kwargs["w2"], amax_x=kwargs["amax_x2"], w_inv_scale=kwargs["s_2"],
grad_amax_state=kwargs["grad_amax_xout"], next_grad_amax_state=kwargs["next_grad_amax_xout"],
next_amax_x=kwargs["next_amax_x2"])
saves.extend([*s, out])
else:
x_w13, h, x_normed, rrms, s = add_norm_quantize_matmul(x, residual, kwargs["ffn_norm"], kwargs["w13"], kwargs["s_13"],
self.norm_eps, amax_x=kwargs["amax_x13"],
next_amax_x=kwargs["next_amax_x13"],
grad_amax_state=kwargs["grad_amax_xw13"],
next_grad_amax_state=kwargs["next_grad_amax_xw13"])
saves.extend([x_normed, rrms, *s, x_w13])
out, s = silu_w13_quantize_matmul(x_w13, kwargs["w2"], kwargs["s_2"], amax_x2=kwargs["amax_x2"],
next_amax_x2=kwargs["next_amax_x2"],
grad_amax_xw13=kwargs["grad_amax_xw13"],
next_grad_amax_xw13=kwargs["next_grad_amax_xw13"],
grad_amax_xout=kwargs["grad_amax_xout"],
next_grad_amax_xout=kwargs["next_grad_amax_xout"])
saves.extend([*s, out])
return out, h, saves
x_w13, h, x_normed, rrms, ret = add_norm_quantize_matmul(x, residual, ffn_norm, w13, s_13, self.norm_eps,
amax_x=amax_x13)
saves.extend([x_normed, rrms])
new_amaxs.extend(ret[:1])
saves.extend(ret[1:] + [x_w13])
out, ret = silu_w13_quantize_matmul(x_w13, w2, s_2, amax_x2=amax_x2, grad_amax_xw13=grad_amax_xw13, grad_amax_xout=grad_amax_xout)
new_amaxs.extend(ret[:1])
saves.extend(ret[1:] + [out])
return (out, h, *new_amaxs, *saves)
@function(precompile=True, precompile_backward=True)
def run_layer(self, x:Tensor, freqs_cis:Tensor, attn_kwargs:dict, ffn_kwargs:dict, save:bool=True):
attn, attn_saves = self.attention(x, freqs_cis, **attn_kwargs)
ffn, h, ffn_saves = self.feed_forward(x, attn, **ffn_kwargs)
def run_layer(self, x:Tensor, freqs_cis:Tensor,
attention_norm:Tensor, wqkv:Tensor, wo:Tensor,
ffn_norm:Tensor, w13:Tensor, w2:Tensor,
amax_xqkv:Tensor, amax_xo:Tensor,
amax_x13:Tensor, amax_x2:Tensor,
s_qkv:Tensor, s_o:Tensor, s_13:Tensor, s_2:Tensor,
grad_amax_xqkv:Tensor, grad_amax_xo:Tensor,
grad_amax_xw13:Tensor, grad_amax_xout:Tensor):
attn, *attn_ret = self.attention(x, freqs_cis, attention_norm, wqkv, wo,
amax_xqkv=amax_xqkv, amax_xo=amax_xo, s_qkv=s_qkv, s_o=s_o,
grad_amax_xqkv=grad_amax_xqkv, grad_amax_xo=grad_amax_xo)
attn_amaxs, attn_saves = attn_ret[:2], attn_ret[2:]
ffn, h, *ffn_ret = self.feed_forward(x, attn, ffn_norm, w13, w2,
amax_x13=amax_x13, amax_x2=amax_x2, s_13=s_13, s_2=s_2,
grad_amax_xw13=grad_amax_xw13, grad_amax_xout=grad_amax_xout)
ffn_amaxs, ffn_saves = ffn_ret[:2], ffn_ret[2:]
h = h + ffn
if save: return (h, *attn_saves, *ffn_saves)
else: return (h,)
return (h, *attn_amaxs, *ffn_amaxs, *attn_saves, *ffn_saves)
def shard(self, device:tuple[str, ...], mp:bool=False):
from tinygrad.nn.state import get_parameters
@@ -284,64 +214,39 @@ class FlatTransformer:
for v in get_parameters(self): v.shard_(device, axis=None)
else:
# flat per-layer weights: axis 0 is n_layers, so shard axes are +1 vs per-layer Transformer
def _shard_fp8(name:str, axis:int, std:float=0.02):
w = getattr(self, name)
if MXFP8:
from extra.gemm.cdna_asm_gemm import quantize_mxfp8
w_bf16 = Tensor.empty(self.n_layers, w.shape[1], w.shape[2], dtype=dtypes.bfloat16).shard(device, axis=axis).randn_like() * std
w_q, w_e8, _ = quantize_mxfp8(w_bf16)
w.replace(w_q)
self._fp8_inv_scale[name].replace(w_e8.contiguous()).is_param_(False)
self._fp8_next_inv_scale[name].replace(w_e8.contiguous()).is_param_(False)
else:
w.shard_(device, axis=axis)
scale_axis = (1 if axis == 1 else None) if COLUMNWISE_WEIGHT_SCALE else None
self._fp8_inv_scale[name] = self._fp8_inv_scale[name].shard(device, axis=scale_axis).contiguous().is_param_(False)
self._fp8_next_inv_scale[name] = self._fp8_next_inv_scale[name].shard(device, axis=scale_axis).contiguous().is_param_(False)
Tensor.realize(w, self._fp8_inv_scale[name], self._fp8_next_inv_scale[name])
sstd = 0.02 / math.sqrt(2 * self.n_layers)
_shard_fp8("wqkv", 1) # (n_layers, out, dim) shard out
_shard_fp8("wo", 2, sstd) # (n_layers, dim, in) shard in
if SPLIT_W13:
_shard_fp8("w1", 1)
_shard_fp8("w3", 1)
else:
_shard_fp8("w13", 1) # (n_layers, hidden*2, dim) shard out
_shard_fp8("w2", 2, sstd) # (n_layers, dim, hidden) shard in
self.wqkv.shard_(device, axis=1).realize() # (n_layers, out, dim) shard out
self.wo.shard_(device, axis=2).realize() # (n_layers, dim, in) shard in
self.w13.shard_(device, axis=1).realize() # (n_layers, hidden*2, dim) shard out
self.w2.shard_(device, axis=2).realize() # (n_layers, dim, hidden) shard in
self.attention_norm.shard_(device, axis=None).realize()
self.ffn_norm.shard_(device, axis=None).realize()
self.norm.weight.shard_(device, axis=None).realize()
self.tok_embeddings.weight.shard_(device, axis=0).realize()
self.output.shard_(device, axis=1).realize()
self.freqs_cis.shard_(device, axis=None).realize()
for amax_dict in (self._fp8_amax, self._fp8_next_amax, self._fp8_grad_amax, self._fp8_next_grad_amax):
for amax_dict in (self._fp8_amax, self._fp8_grad_amax):
for name in amax_dict:
for i in range(len(amax_dict[name])):
amax_dict[name][i] = amax_dict[name][i].to(device).contiguous().is_param_(False)
amax_dict[name][i] = amax_dict[name][i].to(device).contiguous().requires_grad_(False)
for name in self._fp8_inv_scale:
self._fp8_inv_scale[name] = self._fp8_inv_scale[name].to(device).contiguous().requires_grad_(False)
def __call__(self, tokens:Tensor, save:bool=True):
def __call__(self, tokens:Tensor):
h = self.tok_embeddings(tokens)
freqs_cis = self.freqs_cis.cast(h.dtype)
if not getenv("HK_FLASH_ATTENTION"): freqs_cis = freqs_cis[:, :tokens.shape[1], :, :, :]
a, na, ga, nga, s = self._fp8_amax, self._fp8_next_amax, self._fp8_grad_amax, self._fp8_next_grad_amax, self._fp8_inv_scale
freqs_cis = self.freqs_cis.cast(h.dtype)[:, :tokens.shape[1], :, :, :]
a, ga, s = self._fp8_amax, self._fp8_grad_amax, self._fp8_inv_scale
for i in range(self.n_layers):
attn_kwargs = dict(attention_norm=self.attention_norm[i], wqkv=self.wqkv[i], wo=self.wo[i],
amax_xqkv=a["xqkv"][i], amax_xo=a["xo"][i], s_qkv=s["wqkv"][i], s_o=s["wo"][i],
next_amax_xqkv=na["xqkv"][i], next_amax_xo=na["xo"][i],
grad_amax_xqkv=ga["xqkv"][i], grad_amax_xo=ga["xo"][i],
next_grad_amax_xqkv=nga["xqkv"][i], next_grad_amax_xo=nga["xo"][i])
ffn_kwargs = dict(ffn_norm=self.ffn_norm[i], w2=self.w2[i],
amax_x2=a["x2"][i], s_2=s["w2"][i], grad_amax_xout=ga["xout"][i], next_grad_amax_xout=nga["xout"][i],
next_amax_x2=na["x2"][i])
if SPLIT_W13:
ffn_kwargs.update(w1=self.w1[i], w3=self.w3[i], amax_x1=a["x1"][i], amax_x3=a["x3"][i],
next_amax_x1=na["x1"][i], next_amax_x3=na["x3"][i],
s_1=s["w1"][i], s_3=s["w3"][i], grad_amax_xw1=ga["xw1"][i], grad_amax_xw3=ga["xw3"][i],
next_grad_amax_xw1=nga["xw1"][i], next_grad_amax_xw3=nga["xw3"][i])
else:
ffn_kwargs.update(w13=self.w13[i], amax_x13=a["x13"][i], s_13=s["w13"][i], grad_amax_xw13=ga["xw13"][i],
next_grad_amax_xw13=nga["xw13"][i], next_amax_x13=na["x13"][i])
h, *_ = self.run_layer(h, freqs_cis, attn_kwargs, ffn_kwargs, save=save)
h, *ret = self.run_layer(h, freqs_cis,
self.attention_norm[i], self.wqkv[i], self.wo[i],
self.ffn_norm[i], self.w13[i], self.w2[i],
amax_xqkv=a["xqkv"][i], amax_xo=a["xo"][i],
amax_x13=a["x13"][i], amax_x2=a["x2"][i],
s_qkv=s["wqkv"][i], s_o=s["wo"][i],
s_13=s["w13"][i], s_2=s["w2"][i],
grad_amax_xqkv=ga["xqkv"][i], grad_amax_xo=ga["xo"][i],
grad_amax_xw13=ga["xw13"][i], grad_amax_xout=ga["xout"][i])
for name, new_val in zip(["xqkv", "xo", "x13", "x2"], ret[:5]):
a[name][i].assign(new_val)
logits = matmul(self.norm(h), self.output[0], fp8=False)[0]
return logits
@@ -354,59 +259,41 @@ def apply_grad(grad_buf:Tensor, new_grad:UOp):
pads = _get_pads(new_grad)
if len(pads) <= 1:
new_grad = new_grad.cast(grad_buf.dtype)
grad_buf.uop = grad_buf.uop.after(grad_buf.uop.store(grad_buf.uop + new_grad))
store = grad_buf.uop.store(grad_buf.uop + new_grad)
grad_buf.uop = grad_buf.uop.after(store)
return
cur = grad_buf.uop
for pad in sorted(pads, key=lambda p: p.marg[0][0] if p.op == Ops.PAD else 0, reverse=True):
if pad.op == Ops.PAD:
grad_shrink = tuple([(p[0], s+p[0]) for s,p in zip(pad.src[0].shape, pad.marg)])
buf_slice = cur.shrink(grad_shrink)
cur = cur.after(buf_slice.store(buf_slice + pad.src[0].cast(cur.dtype)))
else:
cur = cur.after(cur.store(cur + pad.cast(cur.dtype)))
grad_buf.uop = cur
sorted_pads = sorted(pads, key=lambda p: p.marg[0][0] if p.op == Ops.PAD else 0)
inners_raw = [Tensor(p.src[0] if p.op == Ops.PAD else p, device=grad_buf.device) for p in sorted_pads]
if getenv("FUSED_PAD_GRAD_ACCUM", 0):
from extra.llama_kernels.fused_pad_grad_accum import fused_pad_grad_accum, can_fused_pad_grad_accum
if can_fused_pad_grad_accum(grad_buf, inners_raw):
grad_buf.uop = fused_pad_grad_accum(grad_buf, inners_raw).uop
return
inners = [t.cast(grad_buf.dtype) for t in inners_raw]
grad_buf.assign(grad_buf + inners[0].cat(*inners[1:], dim=0))
if __name__ == "__main__":
config = {}
BS = config["BS"] = getenv("BS", 16)
SEQLEN = config["SEQLEN"] = getenv("SEQLEN", 8192)
SMALL = config["SMALL"] = getenv("SMALL", 0)
from examples.llama3 import MODEL_PARAMS
model_params = MODEL_PARAMS[llama_size:=getenv("LLAMA3_SIZE", "8B")]["args"]
# vocab_size from mixtral tokenizer
if not SMALL: model_params |= {"vocab_size": 32000}
real_vocab_size = model_params['vocab_size']
if (llama_layers:=getenv("LLAMA_LAYERS")) != 0: model_params["n_layers"] = llama_layers
# pad vocab
if (MP := getenv("MP", 1)) > 1: model_params["vocab_size"] = round_up(model_params["vocab_size"], 256 * MP)
vocab_mask:Tensor = Tensor.arange(model_params["vocab_size"]).reshape(1, 1, -1) >= real_vocab_size
model_params = MODEL_PARAMS[getenv("LLAMA3_SIZE", "8B")]["args"]
if (llama_layers:=getenv("LLAMA_LAYERS")) != 0: model_params['n_layers'] = llama_layers
model = FlatTransformer(**model_params, max_context=SEQLEN)
state = nn.state.get_state_dict(model)
print("tensor count:", len(state))
# shard the model
from tinygrad import Device
is_dp = (DP := getenv("DP", 1)) > 1
is_mp = (MP := getenv("MP", 1)) > 1
is_sharding = is_dp or is_mp
device_count = max(DP, MP)
device = tuple(f"{Device.DEFAULT}:{i}" for i in range(device_count))
model.shard(device, is_mp)
if is_dp: vocab_mask.shard_(device, axis=None).realize()
if is_mp: vocab_mask.shard_(device, axis=2).realize()
if (DP := getenv("DP", 1)) > 1:
model.shard(tuple(f"{Device.DEFAULT}:{i}" for i in range(DP)))
if (MP := getenv("MP", 1)) > 1:
model.shard(tuple(f"{Device.DEFAULT}:{i}" for i in range(MP)), mp=True)
# preallocate all the grad buffers and zero them out
grad_dtype = lambda x: dtypes.bfloat16 if x.dtype in dtypes.fp8s else x.dtype
grads = {x:x.zeros_like(dtype=grad_dtype(x)).contiguous() for x in state.values() if x.is_param}
fp8_amax = [t for ts in model._fp8_amax.values() for t in ts]
fp8_grad_amax = [t for ts in model._fp8_grad_amax.values() for t in ts]
grads = {x:Tensor.zeros(x.shape, dtype=x.dtype, device=x.device).contiguous()
for x in state.values() if x.requires_grad is None}
# print model size
sz = 0
@@ -415,34 +302,23 @@ if __name__ == "__main__":
sz += v.nbytes()
print(f"total sz: {sz/1e9:.2f} GB")
with Timing("fake data: "): tokens = Tensor.randint(BS, SEQLEN+1, low=0, high=real_vocab_size, dtype=dtypes.int)
with Timing("fake data: "): tokens = Tensor.randint(BS, SEQLEN+1, low=0, high=model.vocab_size, dtype=dtypes.int)
with Timing("realize weights/grads/data: "): Tensor.realize(*state.values(), *grads.values(), tokens)
print("mem per device: " + ', '.join(f"{dev}: {mem/1e9:.2f} GB" for dev, mem in sorted(GlobalCounters.mem_used_per_device.items())))
if DP > 1: tokens = tokens.shard(tuple(f"{Device.DEFAULT}:{i}" for i in range(DP)), axis=0)
if MP > 1: tokens = tokens.shard(tuple(f"{Device.DEFAULT}:{i}" for i in range(MP)))
@TinyJit
def fwd_bwd(tokens:Tensor):
with Timing("python forward: "):
for amax_dict in (model._fp8_next_amax, model._fp8_next_grad_amax):
for ts in amax_dict.values():
for nxt in ts: nxt.assign(0)
logits = model(tokens[:, :-1], save=llama_size=="8B")
loss = vocab_mask.where(-1e9, logits).sparse_categorical_crossentropy(tokens[:, 1:])
def jit_step(tokens:Tensor):
with Timing("python forward: "): loss = model(tokens[:, :-1]).sparse_categorical_crossentropy(tokens[:, 1:])
with Timing("python backward: "):
for t,g in zip(grads, loss.gradient(*grads)):
apply_grad(grads[t], g.uop)
with Timing("run fwd_bwd: "): loss.realize(*grads.values(), *fp8_amax, *fp8_grad_amax)
@TinyJit
def optim_step():
for g in grads.values(): g.assign(g.zeros_like())
Tensor.realize(*grads.values())
with Timing("run step: "): loss.realize(*grads.values())
for i in range(6):
GlobalCounters.reset()
profile_marker(f"step {i}")
with Timing(colored(f"*** step {i}: ", "red")):
fwd_bwd(tokens)
optim_step()
jit_step(tokens)
print("mem per device: " + ', '.join(f"{dev}: {mem/1e9:.2f} GB" for dev, mem in sorted(GlobalCounters.mem_used_per_device.items())))
-351
View File
@@ -1,351 +0,0 @@
import math, os, functools
if __name__ == "__main__":
os.environ["DEFAULT_FLOAT"] = "bfloat16"
os.environ["OPTIM_DTYPE"] = "bfloat16"
if "DEV" not in os.environ: os.environ["DEV"] = "NULL::gfx950"
# CDNA
os.environ["DEVICE_IN_FUNCTION_BUG"] = "1"
os.environ["ALL2ALL"] = "1"
os.environ["USE_ATOMICS"] = "1"
from tinygrad import Tensor, nn, function, getenv, dtypes, TinyJit
from tinygrad.helpers import Timing, colored, GlobalCounters, profile_marker
from tinygrad.uop.ops import Ops, UOp
from extra.models.llama import apply_rotary_emb
from extra.llama_kernels.rmsnorm import rmsnorm
from extra.gemm.cdna_asm_gemm import _mx_block_scale, _mx_block_scale_3d, quantize_mxfp8
from extra.gemm.moe_gemm import grouped_mx_gemm
from extra.gemm.moe_routing import route, dispatch, combine
FP8_DTYPE = dtypes.fp8e4m3
FP8_MAX = 448.0
INIT_STD = 0.02
ASM_GEMM = getenv("ASM_GEMM", 0)
def _quant_dequant_fwd(x:Tensor) -> Tensor:
# x (2d bf16) -> bf16 value after an mxfp8 round-trip (1x32 block scaling on the last axis)
M, K = x.shape
scale_K = K // 32
amax = x.float().reshape(M, scale_K, 32).abs().max(axis=-1)
e8 = (amax.maximum(1e-38).log2().floor() + 127).clamp(0, 254).cast(dtypes.uint8)
qscale = (127.0 - e8.cast(dtypes.float32)).exp2().reshape(M, scale_K, 1).expand(M, scale_K, 32).reshape(M, K)
x_fp8 = (x.float() * qscale).clamp(-FP8_MAX, FP8_MAX).cast(FP8_DTYPE).cast(dtypes.float32)
return (x_fp8 * _mx_block_scale(e8)).cast(dtypes.bfloat16)
@functools.cache
def _quant_dequant_fwd_fxn(x_p, device):
return _quant_dequant_fwd(Tensor(x_p, device=device))
def _quant_dequant_bwd(grad:UOp, call:UOp) -> tuple:
return (Tensor(grad).cast(dtypes.bfloat16).uop,)
def quant_dequant_mx(x:Tensor) -> Tensor:
fxn = _quant_dequant_fwd_fxn(x.as_param(0).uop, x.device)
return Tensor(UOp.maketuple(fxn.uop).call(x.uop, grad_fxn=_quant_dequant_bwd).gettuple(0))
def _mx_scale(e8:Tensor) -> Tensor:
return _mx_block_scale(e8) if e8.ndim == 2 else _mx_block_scale_3d(e8)
def _dequant_fwd(w_q:Tensor, w_scale:Tensor) -> Tensor:
return w_q.cast(dtypes.bfloat16) * _mx_scale(w_scale)
@functools.cache
def _dequant_fwd_fxn(wq_p, ws_p, device):
return _dequant_fwd(Tensor(wq_p, device=device), Tensor(ws_p, device=device))
def _dequant_bwd(grad:UOp, call:UOp) -> tuple:
return (Tensor(grad).cast(dtypes.bfloat16).uop, None)
def dequant_weight(w_q:Tensor, w_scale:Tensor) -> Tensor:
fxn = _dequant_fwd_fxn(w_q.as_param(0).uop, w_scale.as_param(1).uop, w_q.device)
call = UOp.maketuple(fxn.uop).call(w_q.uop, w_scale.uop, grad_fxn=_dequant_bwd)
return Tensor(call.gettuple(0))
def matmul_mx(x:Tensor, w_q:Tensor, w_scale:Tensor) -> Tensor:
l_shape = x.shape[:-1]
if ASM_GEMM:
from extra.gemm.cdna_asm_gemm import asm_gemm, can_use_asm_gemm, mx_pack
x2, K, N = x.reshape(-1, x.shape[-1]), x.shape[-1], w_q.shape[0]
wq, ws = w_q, w_scale
if (pad := (-K) % 256):
x2 = x2.pad(((0, 0), (0, pad)))
wq = wq.pad(((0, 0), (0, pad)))
ws = ws.pad(((0, 0), (0, pad // 32)), value=127).cast(dtypes.uint8)
if (npad := (-N) % 256):
wq = wq.pad(((0, npad), (0, 0)))
ws = ws.pad(((0, npad), (0, 0)), value=127).cast(dtypes.uint8)
x_q, x_e8, x_si = quantize_mxfp8(x2)
if x_si is not None and can_use_asm_gemm(x_q, wq.T):
out = asm_gemm(x_q, wq.T, mx=True, mx_scales=(x_si, x_e8, mx_pack(ws), ws), mx_w_stored=True)
return (out[:, :N] if npad else out).reshape(*l_shape, N).cast(dtypes.bfloat16)
x_phys = quant_dequant_mx(x.reshape(-1, x.shape[-1])).reshape(*l_shape, x.shape[-1])
w_phys = dequant_weight(w_q, w_scale)
return (x_phys @ w_phys.T).cast(dtypes.bfloat16)
def _pad_to_mult(t:Tensor, axis:int, mult:int=256) -> Tensor:
if (r := (-t.shape[axis]) % mult) == 0: return t
pads = [(0, 0)] * t.ndim
pads[axis] = (0, r)
return t.pad(tuple(pads))
def _pad_cols(t:Tensor) -> Tensor: return _pad_to_mult(t, -1)
def _pad_rows(t:Tensor) -> Tensor: return _pad_to_mult(t, -2)
def swiglu(x:Tensor, limit:float=7.0, alpha:float=1.702) -> Tensor:
x_glu, x_linear = x[..., ::2], x[..., 1::2]
x_glu = x_glu.clamp(max_=limit)
x_linear = x_linear.clamp(-limit, limit)
return (x_glu * (alpha * x_glu).sigmoid()) * (x_linear + 1)
def precompute_freqs_cis(dim: int, end: int, theta: float = 10000.0) -> Tensor:
freqs = 1.0 / (theta ** (Tensor.arange(0, dim, 2, dtype=dtypes.float32)[:(dim // 2)] / dim))
freqs = Tensor.arange(end, dtype=dtypes.float32).unsqueeze(dim=1) * freqs.unsqueeze(dim=0)
return Tensor.stack(freqs.cos(), freqs.sin(), dim=-1).cast(dtypes.default_float).reshape(1, end, 1, dim//2, 2)
class GPTOSS:
def __init__(self, dim:int, n_layers:int, n_heads:int, n_kv_heads:int, head_dim:int, n_experts:int, experts_per_tok:int,
intermediate_size:int, vocab_size:int, norm_eps:float=1e-5, rope_theta:int=150000, sliding_window:int=128,
swiglu_limit:float=7.0, max_context:int=8192):
self.dim, self.n_layers, self.n_heads, self.n_kv_heads, self.head_dim = dim, n_layers, n_heads, n_kv_heads, head_dim
self.n_rep = n_heads // n_kv_heads
self.n_experts, self.experts_per_tok, self.intermediate_size = n_experts, experts_per_tok, intermediate_size
self.vocab_size, self.norm_eps, self.sliding_window, self.swiglu_limit = vocab_size, norm_eps, sliding_window, swiglu_limit
self.sm_scale = 1.0 / math.sqrt(head_dim)
scaled_std = INIT_STD / math.sqrt(2 * n_layers)
q_dim, qkv_dim = n_heads * head_dim, head_dim * (n_heads + 2 * n_kv_heads)
# attn
self.wqkv, self.wqkv_scale = self._quant_weight(n_layers, qkv_dim, dim)
self.wqkv_bias = Tensor.zeros(n_layers, qkv_dim, dtype=dtypes.bfloat16).contiguous()
self.wo, self.wo_scale = self._quant_weight(n_layers, dim, q_dim, std=scaled_std)
self.wo_bias = Tensor.zeros(n_layers, dim, dtype=dtypes.bfloat16).contiguous()
self.sinks = Tensor.zeros(n_layers, n_heads, dtype=dtypes.bfloat16).contiguous()
self.attention_norm = Tensor.ones(n_layers, dim).contiguous()
# moe ffn
self.ffn_norm = Tensor.ones(n_layers, dim).contiguous()
self.gate = Tensor.normal(n_layers, n_experts, dim, mean=0.0, std=INIT_STD, dtype=dtypes.bfloat16)
self.gate_bias = Tensor.zeros(n_layers, n_experts, dtype=dtypes.bfloat16).contiguous()
self.w_gate_up, self.w_gate_up_scale = self._quant_weight(n_layers, n_experts, intermediate_size * 2, dim, moe=True)
self.w_gate_up_bias = Tensor.zeros(n_layers, n_experts, intermediate_size * 2, dtype=dtypes.bfloat16).contiguous()
self.w_down, self.w_down_scale = self._quant_weight(n_layers, n_experts, dim, intermediate_size, std=scaled_std, moe=True)
self.w_down_bias = Tensor.zeros(n_layers, n_experts, dim, dtype=dtypes.bfloat16).contiguous()
# output
self.norm = nn.RMSNorm(dim, norm_eps)
self.tok_embeddings = nn.Embedding(vocab_size, dim)
self.tok_embeddings.weight = Tensor.normal(vocab_size, dim, mean=0.0, std=INIT_STD, dtype=dtypes.bfloat16)
self.output = Tensor.normal(vocab_size, dim, mean=0.0, std=INIT_STD, dtype=dtypes.bfloat16)
self.freqs_cis = precompute_freqs_cis(head_dim, max_context * 2, rope_theta).contiguous().is_param_(False)
def _quant_weight(self, *shape:int, std:float=INIT_STD, moe:bool=False):
def _one(*s:int):
w = Tensor.zeros(*s) if getenv("ZEROS") else Tensor.normal(*s, mean=0.0, std=std)
w_q, w_e8, _ = quantize_mxfp8(_pad_cols(_pad_rows(w)) if moe else w)
return w_q, w_e8.is_param_(False)
if moe:
qs = [_one(*shape[1:]) for _ in range(shape[0])]
return [q[0] for q in qs], [q[1] for q in qs]
return _one(*shape)
def _attn_mask(self, seqlen:int, dtype) -> Tensor:
i, j = Tensor.arange(seqlen).reshape(seqlen, 1), Tensor.arange(seqlen).reshape(1, seqlen)
return (j <= i).where(0.0, -1e30).cast(dtype).contiguous()
def _sliding_attention(self, xq:Tensor, xk:Tensor, xv:Tensor, sinks:Tensor) -> Tensor:
bsz, seqlen, H, hd = xq.shape
KV, R, W = self.n_kv_heads, self.n_rep, self.sliding_window
assert seqlen % W == 0, f"seqlen {seqlen} must be a multiple of sliding_window {W} for banded attention"
nb = seqlen // W
q = xq.reshape(bsz, seqlen, KV, R, hd).permute(0, 2, 3, 1, 4).reshape(bsz, KV, R, nb, W, hd).float()
k, v = (x.permute(0, 2, 1, 3).reshape(bsz, KV, 1, nb, W, hd).float() for x in (xk, xv))
kk, vv = (x.pad((None, None, None, (1, 0), None, None))[:, :, :, :nb].cat(x, dim=-2) for x in (k, v))
sc = (q @ kk.transpose(-1, -2)) * self.sm_scale # (B,KV,R,nb,W,2W)
i, j, pv = Tensor.arange(W).reshape(W, 1), Tensor.arange(2 * W).reshape(1, 2 * W), Tensor.arange(nb).reshape(nb, 1, 1) >= 1
sc = ((j > i) & (j <= i + W) & (pv | (j >= W))).where(sc, -float("inf"))
sink = sinks.reshape(1, KV, R, 1, 1, 1).float()
m = sc.max(-1, keepdim=True).maximum(sink)
e = (sc - m).exp()
p = (e / (e.sum(-1, keepdim=True) + (sink - m).exp())).cast(dtypes.bfloat16)
attn = p @ vv.cast(dtypes.bfloat16)
return attn.reshape(bsz, KV, R, seqlen, hd).permute(0, 3, 1, 2, 4).reshape(bsz, seqlen, H * hd)
def attention(self, x:Tensor, freqs_cis:Tensor, mask:Tensor, sliding:bool, *, attention_norm:Tensor, wqkv:Tensor,
wqkv_scale:Tensor, wqkv_bias:Tensor, wo:Tensor, wo_scale:Tensor, wo_bias:Tensor, sinks:Tensor):
bsz, seqlen, _ = x.shape
x_normed, rrms = rmsnorm(x, self.norm_eps)
qkv = matmul_mx(x_normed * attention_norm, wqkv, wqkv_scale) + wqkv_bias
qkv = qkv.reshape(bsz, seqlen, self.n_kv_heads, self.n_rep + 2, self.head_dim)
xq = qkv[:, :, :, :self.n_rep].reshape(bsz, seqlen, self.n_heads, self.head_dim)
xk, xv = qkv[:, :, :, self.n_rep], qkv[:, :, :, self.n_rep + 1]
xq, xk = apply_rotary_emb(xq, xk, freqs_cis)
xq, xk, xv = xq.cast(dtypes.bfloat16), xk.cast(dtypes.bfloat16), xv.cast(dtypes.bfloat16) # (B,N,H,D)/(B,N,KV,D)
if sliding:
attn = self._sliding_attention(xq, xk, xv, sinks)
elif getenv("HK_FLASH_ATTENTION"):
from extra.thunder.amd.fa import flash_attention
attn, *_ = flash_attention(xq, xk, xv, is_causal=True, write_flat=True, sinks=sinks)
attn = attn.reshape(bsz, seqlen, self.n_heads * self.head_dim)
else:
xqm = xq.reshape(bsz, seqlen, self.n_kv_heads, self.n_rep, self.head_dim).permute(0, 2, 3, 1, 4)
xkm, xvm = xk.permute(0, 2, 1, 3).unsqueeze(2), xv.permute(0, 2, 1, 3).unsqueeze(2)
scores = (xqm @ xkm.transpose(-2, -1)).float() * self.sm_scale + mask
sink = sinks.reshape(1, self.n_kv_heads, self.n_rep, 1, 1).float()
m = scores.max(-1, keepdim=True).maximum(sink)
e = (scores - m).exp()
w = (e / (e.sum(-1, keepdim=True) + (sink - m).exp())).cast(dtypes.bfloat16)
attn = (w @ xvm).permute(0, 3, 1, 2, 4).reshape(bsz, seqlen, self.n_heads * self.head_dim)
out = matmul_mx(attn, wo, wo_scale) + wo_bias
return out, [x_normed, rrms, attn]
def feed_forward(self, x:Tensor, *, ffn_norm:Tensor, gate:Tensor, gate_bias:Tensor,
w_gate_up:Tensor, w_gate_up_scale:Tensor, w_gate_up_bias:Tensor,
w_down:Tensor, w_down_scale:Tensor, w_down_bias:Tensor):
x_normed, rrms = rmsnorm(x, self.norm_eps)
inp = x_normed * ffn_norm
logits = inp.float() @ gate.float().T + gate_bias.float()
dim, inter = self.dim, self.intermediate_size
if getenv("GROUPED_MOE", 0):
bsz, seqlen = x.shape[:2]
inp, logits = inp.reshape(-1, dim), logits.reshape(-1, self.n_experts)
r = route(logits, self.experts_per_tok, self.n_experts)
onehot = r.rows_e.one_hot(self.n_experts).float()
xg = dispatch(_pad_cols(inp.cast(dtypes.bfloat16)), r)
h = grouped_mx_gemm(xg, (w_gate_up, w_gate_up_scale), r.off)[:, :2*inter] + (onehot @ w_gate_up_bias.float()).cast(dtypes.bfloat16)
y = swiglu(h, self.swiglu_limit)
z = grouped_mx_gemm(_pad_cols(y.cast(dtypes.bfloat16)), (w_down, w_down_scale), r.off)[:, :dim] \
+ (onehot @ w_down_bias.float()).cast(dtypes.bfloat16)
out = combine(z, r, inp.shape[0], self.experts_per_tok).reshape(bsz, seqlen, dim)
else:
thresh = logits.topk(self.experts_per_tok)[0][..., -1:]
weights = (logits >= thresh).where(logits, -float("inf")).softmax(-1)
out = None
for e in range(self.n_experts):
gu_q, gu_s = w_gate_up[e][:2*inter, :dim].contiguous(), w_gate_up_scale[e][:2*inter, :dim//32].contiguous()
dn_q, dn_s = w_down[e][:dim, :inter].contiguous(), w_down_scale[e][:dim, :inter//32].contiguous()
gate_up = matmul_mx(inp, gu_q, gu_s) + w_gate_up_bias[e]
y = (matmul_mx(swiglu(gate_up, self.swiglu_limit), dn_q, dn_s) + w_down_bias[e]).contiguous()
contrib = weights[..., e:e+1].cast(y.dtype) * y
out = contrib if out is None else out + contrib
return out, [x_normed, rrms]
@function(precompile=True, precompile_backward=True)
def run_layer(self, x:Tensor, freqs_cis:Tensor, mask:Tensor, sliding:bool, attn_kwargs:dict, ffn_kwargs:dict, save:bool=True):
attn, attn_saves = self.attention(x, freqs_cis, mask, sliding, **attn_kwargs)
h = x + attn
ffn, ffn_saves = self.feed_forward(h, **ffn_kwargs)
h = h + ffn
if save: return (h, *attn_saves, *ffn_saves)
return (h,)
def shard(self, device:tuple[str, ...], mp:bool=False):
assert not mp, "MP not supported"
from tinygrad.nn.state import get_parameters
for v in get_parameters(self): v.shard_(device, axis=None)
Tensor.realize(*get_parameters(self))
def __call__(self, tokens:Tensor, save:bool=True):
h = self.tok_embeddings(tokens)
bsz, seqlen = tokens.shape
freqs_cis = self.freqs_cis.cast(h.dtype)[:, :seqlen, :, :, :]
mask_full = None if getenv("HK_FLASH_ATTENTION") else self._attn_mask(seqlen, dtypes.float32)
for i in range(self.n_layers):
attn_kwargs = dict(attention_norm=self.attention_norm[i], wqkv=self.wqkv[i], wqkv_scale=self.wqkv_scale[i],
wqkv_bias=self.wqkv_bias[i], wo=self.wo[i], wo_scale=self.wo_scale[i], wo_bias=self.wo_bias[i],
sinks=self.sinks[i])
ffn_kwargs = dict(ffn_norm=self.ffn_norm[i], gate=self.gate[i], gate_bias=self.gate_bias[i],
w_gate_up=self.w_gate_up[i], w_gate_up_scale=self.w_gate_up_scale[i], w_gate_up_bias=self.w_gate_up_bias[i],
w_down=self.w_down[i], w_down_scale=self.w_down_scale[i], w_down_bias=self.w_down_bias[i])
h, *_ = self.run_layer(h, freqs_cis, mask_full, i % 2 == 0, attn_kwargs, ffn_kwargs, save=save)
logits = self.norm(h) @ self.output.T
return logits
def _get_pads(uop:UOp) -> list[UOp]:
if uop.op == Ops.ADD: return _get_pads(uop.src[0]) + _get_pads(uop.src[1])
return [uop]
def apply_grad(grad_buf:Tensor, new_grad:UOp):
pads = _get_pads(new_grad)
if len(pads) <= 1:
new_grad = new_grad.cast(grad_buf.dtype)
grad_buf.uop = grad_buf.uop.after(grad_buf.uop.store(grad_buf.uop + new_grad))
return
cur = grad_buf.uop
for pad in sorted(pads, key=lambda p: p.marg[0][0] if p.op == Ops.PAD else 0, reverse=True):
if pad.op == Ops.PAD:
grad_shrink = tuple([(p[0], s+p[0]) for s,p in zip(pad.src[0].shape, pad.marg)])
buf_slice = cur.shrink(grad_shrink)
cur = cur.after(buf_slice.store(buf_slice + pad.src[0].cast(cur.dtype)))
else:
cur = cur.after(cur.store(cur + pad.cast(cur.dtype)))
grad_buf.uop = cur
GPT_OSS_20B = dict(dim=2880, n_layers=24, n_heads=64, n_kv_heads=8, head_dim=64, n_experts=32, experts_per_tok=4,
intermediate_size=2880, vocab_size=128256, norm_eps=1e-5, rope_theta=150000, sliding_window=128,
swiglu_limit=7.0)
if __name__ == "__main__":
config = {}
BS = config["BS"] = getenv("BS", 16)
SEQLEN = config["SEQLEN"] = getenv("SEQLEN", 8192)
model_params = GPT_OSS_20B
real_vocab_size = model_params["vocab_size"]
if (layers := getenv("LAYERS")) != 0: model_params["n_layers"] = layers
model = GPTOSS(**model_params, max_context=SEQLEN)
state = nn.state.get_state_dict(model)
print("tensor count:", len(state))
from tinygrad import Device
is_dp = (DP := getenv("DP", 1)) > 1
device_count = DP
device = tuple(f"{Device.DEFAULT}:{i}" for i in range(device_count))
if is_dp: model.shard(device)
# preallocate all the grad buffers and zero them out
grad_dtype = lambda x: dtypes.bfloat16 if x.dtype in dtypes.fp8s else x.dtype
grads = {x:x.zeros_like(dtype=grad_dtype(x)).contiguous() for x in state.values() if x.is_param}
# print model size
sz = 0
for k,v in state.items():
print(f"{colored(k, 'green' if v in grads else 'white'):30s} {str(v.shape):30s} {str(v.dtype):20s} {v.device} {v.nbytes()/1e9:.2f} GB")
sz += v.nbytes()
print(f"total sz: {sz/1e9:.2f} GB")
with Timing("fake data: "): tokens = Tensor.randint(BS, SEQLEN+1, low=0, high=real_vocab_size, dtype=dtypes.int)
with Timing("realize weights/grads/data: "): Tensor.realize(*state.values(), *grads.values(), tokens)
print("mem per device: " + ', '.join(f"{dev}: {mem/1e9:.2f} GB" for dev, mem in sorted(GlobalCounters.mem_used_per_device.items())))
if is_dp: tokens = tokens.shard(device, axis=0)
@TinyJit
def fwd_bwd(tokens:Tensor):
with Timing("python forward: "):
logits = model(tokens[:, :-1], save=True)
loss = logits.sparse_categorical_crossentropy(tokens[:, 1:])
with Timing("python backward: "):
for t,g in zip(grads, loss.gradient(*grads)):
apply_grad(grads[t], g.uop)
with Timing("run fwd_bwd: "): loss.realize(*grads.values())
@TinyJit
def optim_step():
for g in grads.values(): g.assign(g.zeros_like())
Tensor.realize(*grads.values())
for i in range(6):
GlobalCounters.reset()
profile_marker(f"step {i}")
with Timing(colored(f"*** step {i}: ", "red")):
fwd_bwd(tokens)
optim_step()
print("mem per device: " + ', '.join(f"{dev}: {mem/1e9:.2f} GB" for dev, mem in sorted(GlobalCounters.mem_used_per_device.items())))
-68
View File
@@ -1,68 +0,0 @@
import unittest
from tinygrad import Tensor, TinyJit
from tinygrad.nn.state import get_parameters
from examples.mlperf.models.flat_llama import apply_grad
class FlatModel:
def __init__(self, n_layers:int, dim:int, hidden:int):
self.n_layers = n_layers
self.w1 = Tensor.uniform(n_layers, dim, hidden, low=-0.1, high=0.1)
self.w2 = Tensor.uniform(n_layers, hidden, dim, low=-0.1, high=0.1)
self.scale = Tensor.uniform(dim, low=0.9, high=1.1)
self.bias = Tensor.zeros(dim).contiguous()
def __call__(self, x:Tensor) -> Tensor:
h = x
for i in range(self.n_layers):
h = (h @ self.w1[i]).relu() @ self.w2[i] + h
return (h * self.scale + self.bias).sum()
class TestApplyGradE2E(unittest.TestCase):
def _run_with_apply_grad(self, model, xs):
grads = {p: Tensor.zeros(p.shape, dtype=p.dtype).contiguous().realize() for p in get_parameters(model)}
for x in xs:
loss = model(x)
for p, g in zip(grads, loss.gradient(*grads)):
apply_grad(grads[p], g.uop)
Tensor.realize(loss, *grads.values())
return [grads[p] for p in get_parameters(model)]
def _run_reference(self, model, xs):
for x in xs: model(x).backward()
return [p.grad for p in get_parameters(model)]
def _assert_close(self, got, expected, atol, rtol):
for g, e in zip(got, expected):
self.assertTrue(g.allclose(e, atol=atol, rtol=rtol).item(), f"grad mismatch (max abs diff {(g - e).abs().max().item()})")
def _assert_match(self, model, xs, atol, rtol):
self._assert_close(self._run_with_apply_grad(model, xs), self._run_reference(model, xs), atol, rtol)
def test_e2e_single_step(self):
model = FlatModel(n_layers=3, dim=8, hidden=16)
Tensor.realize(*get_parameters(model))
self._assert_match(model, [Tensor.randn(2, 8).realize()], atol=1e-4, rtol=1e-4)
def test_e2e_multi_step_accumulation(self):
model = FlatModel(n_layers=4, dim=8, hidden=16)
Tensor.realize(*get_parameters(model))
self._assert_match(model, [Tensor.randn(2, 8).realize() for _ in range(3)], atol=1e-4, rtol=1e-4)
def test_e2e_jit(self):
model = FlatModel(n_layers=3, dim=8, hidden=16)
Tensor.realize(*get_parameters(model))
grads = {p: Tensor.zeros(p.shape, dtype=p.dtype).contiguous().realize() for p in get_parameters(model)}
@TinyJit
def fwd_bwd(x:Tensor):
loss = model(x)
for p, g in zip(grads, loss.gradient(*grads)): apply_grad(grads[p], g.uop)
Tensor.realize(loss, *grads.values())
xs = [Tensor.randn(2, 8).realize() for _ in range(3)]
for x in xs: fwd_bwd(x)
self._assert_close([grads[p] for p in get_parameters(model)], self._run_reference(model, xs), atol=1e-3, rtol=1e-3)
if __name__ == "__main__":
unittest.main()
+5 -2
View File
@@ -3,7 +3,8 @@ os.environ["WQKV"] = "1"
import unittest
import numpy as np
from tinygrad import Tensor, nn, dtypes
from tinygrad.device import Device
from tinygrad.nn.state import get_parameters
from tinygrad.device import is_dtype_supported, Device
from examples.mlperf.models.llama import Transformer
from examples.mlperf.models.flat_llama import FlatTransformer
@@ -44,6 +45,8 @@ class TestFlatLlama(unittest.TestCase):
flat = FlatTransformer(**params)
copy_weights(flat, ref)
for p in get_parameters(ref): p.requires_grad_(True)
for p in get_parameters(flat): p.requires_grad_(True)
Tensor.realize(*nn.state.get_state_dict(flat).values())
tokens = Tensor([[1, 50, 100, 999, 2, 10]])
@@ -111,7 +114,7 @@ class TestFlatLlama(unittest.TestCase):
self.assertEqual(ref_logits.shape, flat_logits.shape)
np.testing.assert_allclose(flat_logits, ref_logits, atol=1e-4, rtol=1e-4)
@unittest.skipUnless(dtypes.fp8e4m3 in Device[Device.DEFAULT].renderer.supported_dtypes(), "fp8 not supported on this device")
@unittest.skipUnless(is_dtype_supported(dtypes.fp8e4m3), "fp8 not supported on this device")
def test_forward_fp8(self):
import examples.mlperf.models.flat_llama as flat_llama_mod
old_fp8 = flat_llama_mod.FP8
+37 -91
View File
@@ -1,15 +1,11 @@
from tinygrad.tensor import Tensor
from tinygrad.dtype import dtypes
from tinygrad.nn.optim import Optimizer, OptimizerGroup
from tinygrad.nn.optim import Optimizer
from tinygrad.helpers import FUSE_OPTIM, getenv
from tinygrad.uop.ops import UOp, Ops, AxisType
from tinygrad.uop.ops import UOp, Ops
STOCHASTIC_ROUND = getenv("STOCHASTIC_ROUND", 0)
MASTER_WEIGHTS = getenv("MASTER_WEIGHTS", 0)
ZERO_OPTIM = getenv("ZERO_OPTIM", 0)
FP8_AMAX_MARGIN = getenv("FP8_AMAX_MARGIN", 1.1)
IMMEDIATE_SCALE = getenv("IMMEDIATE_SCALE", 0)
MXFP8 = getenv("MXFP8", 0)
def stochastic_round_bf16(x:Tensor) -> Tensor:
bits = x.bitcast(dtypes.uint32)
@@ -21,50 +17,47 @@ def stochastic_round_bf16(x:Tensor) -> Tensor:
noise = (noise * 0xFFFF).cast(dtypes.uint32)
return ((bits + noise) & 0xFFFF0000).bitcast(dtypes.float32).cast(dtypes.bfloat16)
def clip_grads(grads:list[Tensor], grad_acc, clip_norm) -> Tensor:
for g in grads: g.assign(g / grad_acc)
total_norm = Tensor.stack(*[g.float().square().sum() for g in grads]).sum().sqrt().contiguous()
for g in grads: g.assign((g * (clip_norm / (total_norm + 1e-6)).clamp(max_=1.0)).cast(g.dtype))
return total_norm
class GradAccClipAdamW(Optimizer):
def __init__(self, params:list[Tensor], lr=0.001, b1=0.9, b2=0.999, eps=1e-6, weight_decay=0.0, grad_acc=1, clip_norm=1.0, device=None, fused=FUSE_OPTIM):
super().__init__(params, lr, device, fused)
self.b1, self.b2, self.eps, self.wd = b1, b2, eps, weight_decay
self.b1_t, self.b2_t = (Tensor.ones((1,), dtype=dtypes.float32, device=self.device) for _ in [b1, b2])
self.zero = bool(ZERO_OPTIM) and isinstance(self.device, tuple) and not self.fused
self.m = [self._zero_shard(x) for x in self._new_optim_param()]
self.v = [self._zero_shard(x) for x in self._new_optim_param()]
self.b1_t, self.b2_t = (Tensor.ones((1,), dtype=dtypes.float32, device=self.device, requires_grad=False) for _ in [b1, b2])
self.m = self._new_optim_param()
self.v = self._new_optim_param()
self.grad_acc, self.clip_norm = grad_acc, clip_norm
if MASTER_WEIGHTS and self.params[0].dtype != dtypes.float32:
self.master_params:list[Tensor]|None = [self._zero_shard(p.to(self.device).float().contiguous()) for p in self.params]
self.master_params:list[Tensor]|None = [p.float().contiguous() for p in self.params] if MASTER_WEIGHTS and self.params[0].dtype != dtypes.float32 else None
def fstep(self, grads:list[Tensor]):
if self.fused:
out, extra = self._step([], grads)
updates = [out[0][self.pos_params[i]:self.pos_params[i+1]].reshape(tt.shape) for i, tt in enumerate(self.params)]
else:
self.master_params = None
def _zero_shard(self, t:Tensor) -> Tensor:
if not self.zero or t.ndim < 2 or (t.shape[0] % len(self.device)) != 0: return t
return Tensor(t.uop._shard(0, UOp.range(len(self.device), -1, AxisType.DEVICE)).unshard(0)).clone()
def _zero_gather(self, t:Tensor) -> Tensor:
if not isinstance(t.device, tuple) or t.uop.axis != 0: return t
n, sz = len(t.device), t.shape[0] // len(t.device)
return Tensor.cat(*[t[p*sz:(p+1)*sz] for p in range(n)], dim=0)
def fschedule_step(self, grads:list[Tensor]) -> list[Tensor]:
updates, extra = self._step([], grads)
updates, extra = self._step([], grads)
for i, tt in enumerate(self.params): tt.assign(self._apply_update(tt, updates[i], self.master_params[i] if self.master_params else None))
# collect inv_scale tensors attached to fp8 params (set by _apply_update)
fp8_inv_scales = [tt._inv_scale for tt in self.params if hasattr(tt, '_inv_scale')]
fp8_next_inv_scales = [tt._next_inv_scale for tt in self.params if hasattr(tt, '_next_inv_scale')]
return extra + self.params + self.buffers + (self.master_params or []) + fp8_inv_scales + fp8_next_inv_scales
to_realize = extra+self.params+self.buffers+(self.master_params or [])+fp8_inv_scales
def fstep(self, grads:list[Tensor], grad_norm:Tensor|None=None):
Tensor.realize(*([grad_norm] if grad_norm is not None else []), *self.fschedule_step(grads))
Tensor.realize(*to_realize)
return extra[-1]
def _step(self, params:list[Tensor], grads:list[Tensor]) -> tuple[list[Tensor], list[Tensor]]:
grads = list(grads)
for i in range(len(grads)):
if grads[i].device != self.m[i].device: grads[i] = grads[i].to(self.m[i].device)
if self.fused:
grads[0].assign(grads[0] / self.grad_acc)
total_norm = grads[0].float().square().sum().sqrt()
grads[0].assign((grads[0] * (self.clip_norm / (total_norm + 1e-6)).clamp(max_=1.0)).cast(grads[0].dtype))
else:
for i in range(len(grads)):
grads[i].assign(grads[i] / self.grad_acc)
total_norm = Tensor.stack(*[g.float().square().sum() for g in grads]).sum().sqrt().contiguous()
for i in range(len(grads)):
grads[i].assign((grads[i] * (self.clip_norm / (total_norm + 1e-6)).clamp(max_=1.0)).cast(grads[i].dtype))
ret = []
self.b1_t *= self.b1
self.b2_t *= self.b2
@@ -77,7 +70,7 @@ class GradAccClipAdamW(Optimizer):
v_hat = v_new / (1.0 - self.b2_t)
up = m_hat / (v_hat.sqrt() + self.eps)
ret.append(self.lr * up)
return ret, [self.b1_t, self.b2_t] + self.m + self.v
return ret, [self.b1_t, self.b2_t] + self.m + self.v + [total_norm]
def _apply_update(self, t:Tensor, up:Tensor, master:Tensor|None=None) -> Tensor:
w = master if master is not None else t
@@ -85,60 +78,13 @@ class GradAccClipAdamW(Optimizer):
up = up.float().shard_like(w) + self.lr.to(w.device) * wd * w.detach()
new_w = w.detach() - up
if master is not None: master.assign(new_w)
if self.zero and not (MXFP8 and t.dtype in dtypes.fp8s): new_w = self._zero_gather(new_w)
# when master is offloaded to a different device than the param, results are resharded back onto the param's (sharded) device
offloaded = master is not None and master.device != t.device
if STOCHASTIC_ROUND and t.dtype == dtypes.bfloat16:
out = stochastic_round_bf16(new_w)
return out.shard_like(t) if offloaded else out
if STOCHASTIC_ROUND and t.dtype == dtypes.bfloat16: return stochastic_round_bf16(new_w)
if t.dtype in dtypes.fp8s:
if MXFP8:
from extra.gemm.cdna_asm_gemm import quantize_mxfp8
w_q, w_e8, _ = quantize_mxfp8(new_w.reshape(-1, new_w.shape[-1]))
if self.zero: w_q, w_e8 = self._zero_gather(w_q), self._zero_gather(w_e8)
new_e8 = w_e8.reshape(t._inv_scale.shape)
t._inv_scale.assign(new_e8.shard_like(t._inv_scale) if offloaded else new_e8)
ret = w_q.reshape(t.shape)
return ret.shard_like(t) if offloaded else ret
from examples.mlperf.models.flat_llama import FP8_MAX
if IMMEDIATE_SCALE:
amax_axis = tuple(range(t._inv_scale.ndim, new_w.ndim))
new_inv = ((new_w.float().abs().max(axis=amax_axis).detach() + 1e-8) / FP8_MAX).cast(t._inv_scale.dtype)
t._inv_scale.assign(new_inv.shard_like(t._inv_scale) if offloaded else new_inv)
scale = new_inv.reciprocal().reshape(*new_inv.shape, *([1]*(new_w.ndim-new_inv.ndim)))
ret = (new_w * scale).clamp(-FP8_MAX, FP8_MAX).cast(t.dtype)
return ret.shard_like(t) if offloaded else ret
# delayed scaling: reuse previous step's inv_scale
t._inv_scale.assign(t._next_inv_scale)
inv_scale = t._inv_scale.to(new_w.device) if offloaded else t._inv_scale
scale = inv_scale.reciprocal().reshape(*inv_scale.shape, *([1]*(new_w.ndim-inv_scale.ndim)))
scaled = (new_w * scale).clamp(-FP8_MAX, FP8_MAX)
ret = scaled.cast(t.dtype)
# update inv_scale for next step from quantized result
new_amax = (ret.float().abs().max(axis=tuple(range(inv_scale.ndim, ret.ndim))) * inv_scale * FP8_AMAX_MARGIN).detach()
new_inv = ((new_amax + 1e-8) / FP8_MAX).cast(t._inv_scale.dtype)
t._next_inv_scale.assign(new_inv.shard_like(t._next_inv_scale) if offloaded else new_inv)
return ret.shard_like(t) if offloaded else ret
out = new_w.cast(t.dtype)
return out.shard_like(t) if offloaded else out
class GradAccClipAdamWGroup(OptimizerGroup):
def __init__(self, *optimizers:GradAccClipAdamW):
super().__init__(*optimizers)
for o in self.optimizers[1:]: o.lr = self.optimizers[0].lr
def fstep(self, grads:list[Tensor], grad_norm:Tensor|None=None):
offset = 0
to_realize = []
for o in self.optimizers:
n = len(o.params)
to_realize += o.fschedule_step(grads[offset:offset+n])
offset += n
Tensor.realize(*to_realize, *([grad_norm] if grad_norm is not None else []))
@property
def lr(self): return self.optimizers[0].lr
@property
def device(self): return self.optimizers[0].device
@property
def master_params(self):
mp = [mp for o in self.optimizers for mp in (o.master_params or [])]
return mp if mp else None
amax = new_w.float().abs().max(axis=tuple(range(1, new_w.ndim))).detach() # per-layer amax for (n_layers, out, in)
scale = FP8_MAX / (amax + 1e-8)
fp8_w = (new_w * scale.reshape(-1, *([1]*(new_w.ndim-1)))).clamp(-FP8_MAX, FP8_MAX).cast(t.dtype)
if hasattr(t, '_inv_scale'):
t._inv_scale.assign(((amax + 1e-8) / FP8_MAX).cast(t._inv_scale.dtype))
return fp8_w
return new_w.cast(t.dtype)
@@ -0,0 +1 @@
!*.txt
@@ -1,17 +0,0 @@
#!/bin/bash
export PYTHONPATH="." DEV=AMD
export MODEL="bert"
export DEFAULT_FLOAT="HALF" GPUS=1 BS=128 EVAL_BS=128
export CHECK_OOB=0
export BEAM=3 BEAM_UOPS_MAX=4000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5
export IGNORE_JIT_FIRST_BEAM=1
# export BEAM_LOG_SURPASS_MAX=1
# export BASEDIR="/raid/datasets/wiki"
export RESET_STEP=1
export BENCHMARK=10 BERT_LAYERS=2 DEBUG=2
python3 examples/mlperf/model_train.py
@@ -1,69 +0,0 @@
# 1. Problem
This problem uses BERT for NLP.
## Requirements
Install tinygrad and mlperf-logging (uncomment mlperf from setup.py) from branch mlperf_training_v5.0.
```
git clone https://github.com/tinygrad/tinygrad.git
python3 -m pip install -e ".[mlperf]"
```
Also install gdown (for dataset), numpy, tqdm and tensorflow.
```
pip install gdown numpy tqdm tensorflow
```
### tinybox_green
Install the p2p driver per [README](https://github.com/tinygrad/open-gpu-kernel-modules/blob/550.54.15-p2p/README.md)
This is the default on production tinybox green.
# 2. Directions
## Steps to download and verify data
### 1. Download raw data
```
BASEDIR="/raid/datasets/wiki" WIKI_TRAIN=1 VERIFY_CHECKSUM=1 python3 extra/datasets/wikipedia_download.py
```
### 2. Preprocess train and validation data
Note: The number of threads used for preprocessing is limited by available memory. With 128GB of RAM, a maximum of 16 threads is recommended.
#### Training:
```
BASEDIR="/raid/datasets/wiki" NUM_WORKERS=16 python3 extra/datasets/wikipedia.py pre-train all
```
Generating a specific topic (Between 0 and 499)
```
BASEDIR="/raid/datasets/wiki" python3 extra/datasets/wikipedia.py pre-train 42
```
#### Validation:
```
BASEDIR="/raid/datasets/wiki" python3 extra/datasets/wikipedia.py pre-eval
```
## Running
### tinybox_green
#### Steps to run benchmark
```
examples/mlperf/training_submission_v5.0/tinycorp/benchmarks/bert/implementations/tinybox_green/run_and_time.sh
```
### tinybox_red
#### Steps to run benchmark
```
examples/mlperf/training_submission_v5.0/tinycorp/benchmarks/bert/implementations/tinybox_red/run_and_time.sh
```
### tinybox_8xMI300X
#### Steps to run benchmark
```
examples/mlperf/training_submission_v5.0/tinycorp/benchmarks/bert/implementations/tinybox_8xMI300X/run_and_time.sh
```
@@ -1,17 +0,0 @@
#!/bin/bash
export PYTHONPATH="." DEV=AMD
export MODEL="bert"
export DEFAULT_FLOAT="HALF" GPUS=8 BS=1024 EVAL_BS=1024
export OPT_BASE_LEARNING_RATE=0.0011 OPT_LAMB_BETA_1=0.60466 OPT_LAMB_BETA_2=0.85437 DECAY=0.1
export CHECK_OOB=0
export REWRITE_STACK_LIMIT=500000
export BEAM=3 BEAM_UOPS_MAX=6000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5
export IGNORE_JIT_FIRST_BEAM=1 FREE_INTERMEDIATE=0
export BASEDIR="/raid/datasets/wiki"
export BENCHMARK=10 BERT_LAYERS=2
python3 examples/mlperf/model_train.py
@@ -1,20 +0,0 @@
#!/bin/bash
export PYTHONPATH="." DEV=AMD
export MODEL="bert"
export DEFAULT_FLOAT="HALF" GPUS=8 BS=1024 EVAL_BS=1024
# similar to https://github.com/mlcommons/training_results_v3.1/blob/d06288b2bd675a9d88e0e6181f5bb5626b71ec19/Quanta_Cloud_Technology/results/D54U-3U/bert/result_1.txt#L54
export OPT_BASE_LEARNING_RATE=0.0011 OPT_LAMB_BETA_1=0.60466 OPT_LAMB_BETA_2=0.85437 DECAY=0.1
export TRAIN_STEPS=3900
export CHECK_OOB=0
export REWRITE_STACK_LIMIT=500000
export BEAM=3 BEAM_UOPS_MAX=6000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5
export IGNORE_JIT_FIRST_BEAM=1 FREE_INTERMEDIATE=0
export BASEDIR="/raid/datasets/wiki"
export WANDB=1 PARALLEL=0
RUNMLPERF=1 python3 examples/mlperf/model_train.py
@@ -1,31 +0,0 @@
#!/bin/bash
set -e # Exit on any error
set -o pipefail # Make pipeline fail if any command fails
export PYTHONPATH="." DEV=AMD
export MODEL="bert"
export SUBMISSION_PLATFORM="tinybox_8xMI300X"
export DEFAULT_FLOAT="HALF" GPUS=8 BS=1024 EVAL_BS=1024
# similar to https://github.com/mlcommons/training_results_v3.1/blob/d06288b2bd675a9d88e0e6181f5bb5626b71ec19/Quanta_Cloud_Technology/results/D54U-3U/bert/result_1.txt#L54
export OPT_BASE_LEARNING_RATE=0.0011 OPT_LAMB_BETA_1=0.60466 OPT_LAMB_BETA_2=0.85437 DECAY=0.1
export TRAIN_STEPS=3900
export CHECK_OOB=0
export REWRITE_STACK_LIMIT=500000
export BEAM=3 BEAM_UOPS_MAX=6000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5
export IGNORE_JIT_FIRST_BEAM=1 FREE_INTERMEDIATE=0
export BASEDIR="/raid/datasets/wiki"
# pip install -e ".[mlperf]"
export LOGMLPERF=1
export SEED=$RANDOM
DATETIME=$(date "+%m%d%H%M")
LOGFILE="bert_8xMI300x_${DATETIME}_${SEED}.log"
BENCHMARK=10 INITMLPERF=1 BERT_LAYERS=2 python3 examples/mlperf/model_train.py | tee $LOGFILE
# run
PARALLEL=0 RUNMLPERF=1 python3 examples/mlperf/model_train.py | tee -a $LOGFILE
@@ -1,20 +0,0 @@
#!/bin/bash
export PYTHONPATH="." DEV=AMD DEBUG=0 JIT=1 FLASH_ATTENTION=1
export MODEL="bert"
export DEFAULT_FLOAT="HALF" GPUS=8 BS=1024 EVAL_BS=1024
# similar to https://github.com/mlcommons/training_results_v3.1/blob/d06288b2bd675a9d88e0e6181f5bb5626b71ec19/Quanta_Cloud_Technology/results/D54U-3U/bert/result_1.txt#L54
export OPT_BASE_LEARNING_RATE=0.0011 OPT_LAMB_BETA_1=0.60466 OPT_LAMB_BETA_2=0.85437 DECAY=0.1
export TRAIN_STEPS=3900
export CHECK_OOB=0
export REWRITE_STACK_LIMIT=5000000
export BEAM=0 BEAM_UOPS_MAX=6000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5
export IGNORE_JIT_FIRST_BEAM=1 FREE_INTERMEDIATE=0
export BASEDIR="/raid/datasets/wiki"
export WANDB=1 PARALLEL=0
RUNMLPERF=1 python3 examples/mlperf/model_train.py
@@ -1,24 +0,0 @@
#!/bin/bash
export PYTHONPATH="." DEV=AMD
export MODEL="bert"
export DEFAULT_FLOAT="HALF" GPUS=8 BS=1024 EVAL_BS=1024
# similar to https://github.com/mlcommons/training_results_v3.1/blob/d06288b2bd675a9d88e0e6181f5bb5626b71ec19/Quanta_Cloud_Technology/results/D54U-3U/bert/result_1.txt#L54
export OPT_BASE_LEARNING_RATE=0.0011 OPT_LAMB_BETA_1=0.60466 OPT_LAMB_BETA_2=0.85437 DECAY=0.1
export TRAIN_STEPS=3900
export CHECK_OOB=0
export REWRITE_STACK_LIMIT=5000000
export BEAM=3 BEAM_UOPS_MAX=6000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5
export IGNORE_JIT_FIRST_BEAM=1 FREE_INTERMEDIATE=0
export BASEDIR="/raid/datasets/wiki"
export BEAM_TIMEOUT_SEC=15
export FP8_TRAIN=1
# search
IGNORE_BEAM_CACHE=1 BENCHMARK=10 BERT_LAYERS=2 RUNMLPERF=0 python3 examples/mlperf/model_train.py
export WANDB=1 PARALLEL=0
RUNMLPERF=1 python3 examples/mlperf/model_train.py
@@ -1,31 +0,0 @@
#!/bin/bash
set -e # Exit on any error
set -o pipefail # Make pipeline fail if any command fails
export PYTHONPATH="." DEV=AMD
export MODEL="bert"
export SUBMISSION_PLATFORM="tinybox_8xMI350X"
export DEFAULT_FLOAT="HALF" GPUS=8 BS=1024 EVAL_BS=1024
# similar to https://github.com/mlcommons/training_results_v3.1/blob/d06288b2bd675a9d88e0e6181f5bb5626b71ec19/Quanta_Cloud_Technology/results/D54U-3U/bert/result_1.txt#L54
export OPT_BASE_LEARNING_RATE=0.0011 OPT_LAMB_BETA_1=0.60466 OPT_LAMB_BETA_2=0.85437 DECAY=0.1
export TRAIN_STEPS=3900
export CHECK_OOB=0
export REWRITE_STACK_LIMIT=5000000
export BEAM=3 BEAM_UOPS_MAX=6000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5
export IGNORE_JIT_FIRST_BEAM=1 FREE_INTERMEDIATE=0
export BASEDIR="/raid/datasets/wiki"
# pip install -e ".[mlperf]"
export LOGMLPERF=1
export SEED=$RANDOM
DATETIME=$(date "+%m%d%H%M")
LOGFILE="bert_8xMI350x_${DATETIME}_${SEED}.log"
BENCHMARK=10 INITMLPERF=1 BERT_LAYERS=2 python3 examples/mlperf/model_train.py | tee $LOGFILE
# run
PARALLEL=0 RUNMLPERF=1 python3 examples/mlperf/model_train.py | tee -a $LOGFILE
@@ -1,69 +0,0 @@
# 1. Problem
This problem uses BERT for NLP.
## Requirements
Install tinygrad and mlperf-logging (uncomment mlperf from setup.py) from branch mlperf_training_v5.0.
```
git clone https://github.com/tinygrad/tinygrad.git
python3 -m pip install -e ".[mlperf]"
```
Also install gdown (for dataset), numpy, tqdm and tensorflow.
```
pip install gdown numpy tqdm tensorflow
```
### tinybox_green
Install the p2p driver per [README](https://github.com/tinygrad/open-gpu-kernel-modules/blob/550.54.15-p2p/README.md)
This is the default on production tinybox green.
# 2. Directions
## Steps to download and verify data
### 1. Download raw data
```
BASEDIR="/raid/datasets/wiki" WIKI_TRAIN=1 VERIFY_CHECKSUM=1 python3 extra/datasets/wikipedia_download.py
```
### 2. Preprocess train and validation data
Note: The number of threads used for preprocessing is limited by available memory. With 128GB of RAM, a maximum of 16 threads is recommended.
#### Training:
```
BASEDIR="/raid/datasets/wiki" NUM_WORKERS=16 python3 extra/datasets/wikipedia.py pre-train all
```
Generating a specific topic (Between 0 and 499)
```
BASEDIR="/raid/datasets/wiki" python3 extra/datasets/wikipedia.py pre-train 42
```
#### Validation:
```
BASEDIR="/raid/datasets/wiki" python3 extra/datasets/wikipedia.py pre-eval
```
## Running
### tinybox_green
#### Steps to run benchmark
```
examples/mlperf/training_submission_v5.0/tinycorp/benchmarks/bert/implementations/tinybox_green/run_and_time.sh
```
### tinybox_red
#### Steps to run benchmark
```
examples/mlperf/training_submission_v5.0/tinycorp/benchmarks/bert/implementations/tinybox_red/run_and_time.sh
```
### tinybox_8xMI300X
#### Steps to run benchmark
```
examples/mlperf/training_submission_v5.0/tinycorp/benchmarks/bert/implementations/tinybox_8xMI300X/run_and_time.sh
```
@@ -1,17 +0,0 @@
#!/bin/bash
export PYTHONPATH="." DEV=NV
export MODEL="bert"
export DEFAULT_FLOAT="HALF" SUM_DTYPE="HALF" GPUS=6 BS=72 EVAL_BS=72
export CHECK_OOB=0
export REWRITE_STACK_LIMIT=500000
export BEAM=8 BEAM_UOPS_MAX=10000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5
export IGNORE_JIT_FIRST_BEAM=1
export BEAM_LOG_SURPASS_MAX=1
export BASEDIR="/raid/datasets/wiki"
export BENCHMARK=10 BERT_LAYERS=2 DEBUG=2
python3 examples/mlperf/model_train.py
@@ -1,16 +0,0 @@
#!/bin/bash
export PYTHONPATH="." DEV=NV
export MODEL="bert"
export DEFAULT_FLOAT="HALF" SUM_DTYPE="HALF" GPUS=6 BS=72 EVAL_BS=72
export CHECK_OOB=0
export REWRITE_STACK_LIMIT=500000
export BEAM=8 BEAM_UOPS_MAX=10000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5
export IGNORE_JIT_FIRST_BEAM=1
export BASEDIR="/raid/datasets/wiki"
export WANDB=1 PARALLEL=0
RUNMLPERF=1 python3 examples/mlperf/model_train.py
@@ -1,28 +0,0 @@
#!/bin/bash
set -e # Exit on any error
set -o pipefail # Make pipeline fail if any command fails
export PYTHONPATH="." DEV=NV
export MODEL="bert"
export SUBMISSION_PLATFORM="tinybox_green"
export DEFAULT_FLOAT="HALF" SUM_DTYPE="HALF" GPUS=6 BS=72 EVAL_BS=72
export CHECK_OOB=0
export REWRITE_STACK_LIMIT=500000
export BEAM=8 BEAM_UOPS_MAX=10000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5
export IGNORE_JIT_FIRST_BEAM=1
export BASEDIR="/raid/datasets/wiki"
# pip install -e ".[mlperf]"
export LOGMLPERF=1
export SEED=$RANDOM
DATETIME=$(date "+%m%d%H%M")
LOGFILE="bert_green_${DATETIME}_${SEED}.log"
# init
BENCHMARK=10 INITMLPERF=1 BERT_LAYERS=2 python3 examples/mlperf/model_train.py | tee $LOGFILE
# run
PARALLEL=0 RUNMLPERF=1 python3 examples/mlperf/model_train.py | tee -a $LOGFILE
@@ -1,69 +0,0 @@
# 1. Problem
This problem uses BERT for NLP.
## Requirements
Install tinygrad and mlperf-logging (uncomment mlperf from setup.py) from branch mlperf_training_v5.0.
```
git clone https://github.com/tinygrad/tinygrad.git
python3 -m pip install -e ".[mlperf]"
```
Also install gdown (for dataset), numpy, tqdm and tensorflow.
```
pip install gdown numpy tqdm tensorflow
```
### tinybox_green
Install the p2p driver per [README](https://github.com/tinygrad/open-gpu-kernel-modules/blob/550.54.15-p2p/README.md)
This is the default on production tinybox green.
# 2. Directions
## Steps to download and verify data
### 1. Download raw data
```
BASEDIR="/raid/datasets/wiki" WIKI_TRAIN=1 VERIFY_CHECKSUM=1 python3 extra/datasets/wikipedia_download.py
```
### 2. Preprocess train and validation data
Note: The number of threads used for preprocessing is limited by available memory. With 128GB of RAM, a maximum of 16 threads is recommended.
#### Training:
```
BASEDIR="/raid/datasets/wiki" NUM_WORKERS=16 python3 extra/datasets/wikipedia.py pre-train all
```
Generating a specific topic (Between 0 and 499)
```
BASEDIR="/raid/datasets/wiki" python3 extra/datasets/wikipedia.py pre-train 42
```
#### Validation:
```
BASEDIR="/raid/datasets/wiki" python3 extra/datasets/wikipedia.py pre-eval
```
## Running
### tinybox_green
#### Steps to run benchmark
```
examples/mlperf/training_submission_v5.0/tinycorp/benchmarks/bert/implementations/tinybox_green/run_and_time.sh
```
### tinybox_red
#### Steps to run benchmark
```
examples/mlperf/training_submission_v5.0/tinycorp/benchmarks/bert/implementations/tinybox_red/run_and_time.sh
```
### tinybox_8xMI300X
#### Steps to run benchmark
```
examples/mlperf/training_submission_v5.0/tinycorp/benchmarks/bert/implementations/tinybox_8xMI300X/run_and_time.sh
```
@@ -1,18 +0,0 @@
#!/bin/bash
export PYTHONPATH="." DEV=AMD
export MODEL="bert"
export DEFAULT_FLOAT="HALF" SUM_DTYPE="HALF" GPUS=6 BS=96 EVAL_BS=96
export CHECK_OOB=0
export REWRITE_STACK_LIMIT=500000
export BEAM=5 BEAM_UOPS_MAX=8000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5
export IGNORE_JIT_FIRST_BEAM=1
export BEAM_LOG_SURPASS_MAX=1
export BASEDIR="/raid/datasets/wiki"
export RESET_STEP=1
export BENCHMARK=10 BERT_LAYERS=2 DEBUG=2
python3 examples/mlperf/model_train.py
@@ -1,16 +0,0 @@
#!/bin/bash
export PYTHONPATH="." DEV=AMD
export MODEL="bert"
export DEFAULT_FLOAT="HALF" SUM_DTYPE="HALF" GPUS=6 BS=96 EVAL_BS=96
export CHECK_OOB=0
export REWRITE_STACK_LIMIT=500000
export BEAM=5 BEAM_UOPS_MAX=8000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5
export IGNORE_JIT_FIRST_BEAM=1
export BASEDIR="/raid/datasets/wiki"
export WANDB=1 PARALLEL=0
RUNMLPERF=1 python3 examples/mlperf/model_train.py
@@ -1,31 +0,0 @@
#!/bin/bash
set -e # Exit on any error
set -o pipefail # Make pipeline fail if any command fails
export PYTHONPATH="." DEV=AMD
export MODEL="bert"
export SUBMISSION_PLATFORM="tinybox_red"
export DEFAULT_FLOAT="HALF" SUM_DTYPE="HALF" GPUS=6 BS=96 EVAL_BS=96
export CHECK_OOB=0
export REWRITE_STACK_LIMIT=500000
export BEAM=5 BEAM_UOPS_MAX=8000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5
export IGNORE_JIT_FIRST_BEAM=1
export BASEDIR="/raid/datasets/wiki"
# pip install -e ".[mlperf]"
export LOGMLPERF=${LOGMLPERF:-1}
export SEED=$RANDOM
DATETIME=$(date "+%m%d%H%M")
LOGFILE="bert_red_${DATETIME}_${SEED}.log"
export HCQDEV_WAIT_TIMEOUT_MS=100000 # prevents hang?
# init
sleep 5 && sudo rmmod amdgpu || true
BENCHMARK=10 INITMLPERF=1 BERT_LAYERS=2 python3 examples/mlperf/model_train.py | tee $LOGFILE
# run
PARALLEL=0 RUNMLPERF=1 python3 examples/mlperf/model_train.py | tee -a $LOGFILE
@@ -1,44 +0,0 @@
#!/usr/bin/env bash
export PYTHONPATH="."
export PATH="/opt/rocm-7.1.1/bin:$PATH"
export ROCM_PATH="/opt/rocm-7.1.1"
export DEV=${DEV:-AMD}
export CHECK_OOB=0
export REWRITE_STACK_LIMIT=5000000 HCQDEV_WAIT_TIMEOUT_MS=240000
export DEVICE_IN_FUNCTION_BUG=1
export DEBUG=${DEBUG:-2}
export HK_FLASH_ATTENTION=${HK_FLASH_ATTENTION:-1}
export ALL2ALL=${ALL2ALL:-1}
export LATE_ALLREDUCE=${LATE_ALLREDUCE:-0}
export ALLREDUCE_CAST=${ALLREDUCE_CAST:-1}
export USE_ATOMICS=${USE_ATOMICS:-1}
export MASTER_WEIGHTS=${MASTER_WEIGHTS:-1}
export MXFP8=${MXFP8:-1}
export ZERO_OPTIM=${ZERO_OPTIM:-1}
export OFFLOAD_OPTIM=${OFFLOAD_OPTIM:-0}
export DEFAULT_FLOAT="bfloat16" OPTIM_DTYPE="bfloat16"
export DP=${DP:-8} BS=${BS:-16} EVAL_BS=${EVAL_BS:-8} GRADIENT_ACC_STEPS=${GRADIENT_ACC_STEPS:-1}
export GBS=$((BS * GRADIENT_ACC_STEPS))
export MODEL="gptoss"
export BASEDIR="/raid/datasets/c4-8b/"
export EVAL_TARGET=3.34 EVAL_FREQ=12288
export END_LR="4e-5" WARMUP_STEPS=128 MAX_STEPS=1200000
export SAMPLES=$((MAX_STEPS * GBS))
export SEQLEN=${SEQLEN:-8192}
export SEED=${SEED:-5760}
export DATA_SEED=${DATA_SEED:-5760}
export JITBEAM=${JITBEAM:-3}
export BEAM_UOPS_MAX=6000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5 BEAM_PADTO=0
export FAKEDATA=${FAKEDATA:-1} BENCHMARK=${BENCHMARK:-10}
if [ -z "$FULL_LAYERS" ]; then
export LAYERS=${LAYERS:-2}
fi
python3 examples/mlperf/model_train.py
@@ -1,39 +0,0 @@
#!/usr/bin/env bash
export PYTHONPATH="."
export PATH="/opt/rocm-7.1.1/bin:$PATH"
export ROCM_PATH="/opt/rocm-7.1.1"
export DEV=${DEV:-AMD}
export CHECK_OOB=0
export REWRITE_STACK_LIMIT=5000000 HCQDEV_WAIT_TIMEOUT_MS=240000
export DEVICE_IN_FUNCTION_BUG=1
export DEBUG=${DEBUG:-0}
export HK_FLASH_ATTENTION=${HK_FLASH_ATTENTION:-1}
export ALL2ALL=${ALL2ALL:-1}
export LATE_ALLREDUCE=${LATE_ALLREDUCE:-0}
export ALLREDUCE_CAST=${ALLREDUCE_CAST:-1}
export USE_ATOMICS=${USE_ATOMICS:-1}
export MASTER_WEIGHTS=${MASTER_WEIGHTS:-1}
export MXFP8=${MXFP8:-1}
export ZERO_OPTIM=${ZERO_OPTIM:-1}
export OFFLOAD_OPTIM=${OFFLOAD_OPTIM:-0}
export DEFAULT_FLOAT="bfloat16" OPTIM_DTYPE="bfloat16"
export DP=${DP:-8} BS=${BS:-16} EVAL_BS=${EVAL_BS:-8} GRADIENT_ACC_STEPS=${GRADIENT_ACC_STEPS:-1}
export GBS=$((BS * GRADIENT_ACC_STEPS))
export MODEL="gptoss"
export BASEDIR="/raid/datasets/c4-8b/"
export EVAL_TARGET=3.34 EVAL_FREQ=12288
export END_LR="4e-5" WARMUP_STEPS=128 MAX_STEPS=1200000
export SAMPLES=$((MAX_STEPS * GBS))
export SEQLEN=${SEQLEN:-8192}
export SEED=${SEED:-$RANDOM}
export DATA_SEED=${DATA_SEED:-5760}
export JITBEAM=${JITBEAM:-3}
export BEAM_UOPS_MAX=6000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5 BEAM_PADTO=0
python3 examples/mlperf/model_train.py
@@ -1,49 +0,0 @@
#!/usr/bin/env bash
export PYTHONPATH="."
export PATH="/opt/rocm-7.1.1/bin:$PATH"
export ROCM_PATH="/opt/rocm-7.1.1"
export DEV=${DEV:-AMD}
export CHECK_OOB=0
export REWRITE_STACK_LIMIT=5000000 HCQDEV_WAIT_TIMEOUT_MS=240000
export DEVICE_IN_FUNCTION_BUG=1
export DEBUG=${DEBUG:-2}
export HK_FLASH_ATTENTION=${HK_FLASH_ATTENTION:-1}
export ALL2ALL=${ALL2ALL:-1}
export LATE_ALLREDUCE=${LATE_ALLREDUCE:-1}
export USE_ATOMICS=${USE_ATOMICS:-1}
export ASM_GEMM=${ASM_GEMM:-1}
export WQKV=${WQKV:-1}
export MASTER_WEIGHTS=${MASTER_WEIGHTS:-1}
export FP8=${FP8:-1}
export ALLREDUCE_CAST=${ALLREDUCE_CAST:-1}
export FAST_CE=${FAST_CE:-0}
export FUSED_INPUT_QUANTIZE=${FUSED_INPUT_QUANTIZE:-0}
export FUSED_GRAD_QUANTIZE=${FUSED_GRAD_QUANTIZE:-0}
export FUSED_ADD_NORM_MUL_QUANTIZE=${FUSED_ADD_NORM_MUL_QUANTIZE:-0}
export FUSED_SILU_W13=${FUSED_SILU_W13:-0}
export SPLIT_W13=${SPLIT_W13:-1}
export OFFLOAD_OPTIM=${OFFLOAD_OPTIM:-1}
export DEFAULT_FLOAT="bfloat16" OPTIM_DTYPE="bfloat16"
export DP=${DP:-1} MP=${MP:-8} BS=${BS:-1} EVAL_BS=${EVAL_BS:-1} GRADIENT_ACC_STEPS=${GRADIENT_ACC_STEPS:-2}
export GBS=$((BS * GRADIENT_ACC_STEPS))
export MODEL="llama3"
export BASEDIR="/raid/datasets/c4/"
export LLAMA3_SIZE=${LLAMA3_SIZE:-"405B"}
export SEQLEN=${SEQLEN:-8192}
export SEED=${SEED:-5760}
export DATA_SEED=${DATA_SEED:-5760}
export JITBEAM=${JITBEAM:-3}
export BEAM_UOPS_MAX=6000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5 BEAM_PADTO=1
export FAKEDATA=${FAKEDATA:-1} BENCHMARK=${BENCHMARK:-10}
if [ -z "$FULL_LAYERS" ]; then
export LLAMA_LAYERS=${LLAMA_LAYERS:-2}
fi
python3 examples/mlperf/model_train.py
@@ -1,44 +0,0 @@
#!/usr/bin/env bash
export PYTHONPATH="."
export PATH="/opt/rocm-7.1.1/bin:$PATH"
export ROCM_PATH="/opt/rocm-7.1.1"
export DEV=${DEV:-AMD}
export CHECK_OOB=0
export REWRITE_STACK_LIMIT=5000000 HCQDEV_WAIT_TIMEOUT_MS=240000
export DEVICE_IN_FUNCTION_BUG=1
export DEBUG=${DEBUG:-0}
export HK_FLASH_ATTENTION=${HK_FLASH_ATTENTION:-1}
export ALL2ALL=${ALL2ALL:-1}
export LATE_ALLREDUCE=${LATE_ALLREDUCE:-1}
export USE_ATOMICS=${USE_ATOMICS:-1}
export ASM_GEMM=${ASM_GEMM:-1}
export WQKV=${WQKV:-1}
export MASTER_WEIGHTS=${MASTER_WEIGHTS:-1}
export FP8=${FP8:-1}
export ALLREDUCE_CAST=${ALLREDUCE_CAST:-1}
export FAST_CE=${FAST_CE:-0}
export FUSED_INPUT_QUANTIZE=${FUSED_INPUT_QUANTIZE:-0}
export FUSED_GRAD_QUANTIZE=${FUSED_GRAD_QUANTIZE:-0}
export FUSED_ADD_NORM_MUL_QUANTIZE=${FUSED_ADD_NORM_MUL_QUANTIZE:-0}
export FUSED_SILU_W13=${FUSED_SILU_W13:-0}
export SPLIT_W13=${SPLIT_W13:-1}
export OFFLOAD_OPTIM=${OFFLOAD_OPTIM:-1}
export DEFAULT_FLOAT="bfloat16" OPTIM_DTYPE="bfloat16"
export DP=${DP:-1} MP=${MP:-8} BS=${BS:-1} EVAL_BS=${EVAL_BS:-1} GRADIENT_ACC_STEPS=${GRADIENT_ACC_STEPS:-1152}
export GBS=$((BS * GRADIENT_ACC_STEPS))
export MODEL="llama3"
export BASEDIR="/raid/datasets/c4/"
export LLAMA3_SIZE=${LLAMA3_SIZE:-"405B"}
export SEQLEN=${SEQLEN:-8192}
export SEED=${SEED:-$RANDOM}
export DATA_SEED=${DATA_SEED:-5760}
export JITBEAM=${JITBEAM:-3}
export BEAM_UOPS_MAX=6000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5 BEAM_PADTO=1
python3 examples/mlperf/model_train.py
@@ -0,0 +1,28 @@
# 1. Problem
small llm pretraining: llama 3.1 8b on c4.
## Requirements
Install tinygrad and mlperf-logging (uncomment mlperf from setup.py) from branch mlperf_training_v6.0.
```
git clone https://github.com/tinygrad/tinygrad.git
python3 -m pip install -e ".[mlperf]"
```
# 2. Directions
## Steps to download and verify data
### 1. Download raw data
follow mlperf steps to download the preprocessed c4 dataset.
## Running
### tinybox_8xMI350X
#### Steps to run benchmark
```
examples/mlperf/training_submission_v6.0/tinycorp/benchmarks/llama31_8b/implementations/tinybox_8xMI350X/run_and_time.sh
```
@@ -1,8 +1,6 @@
#!/usr/bin/env bash
export PYTHONPATH="."
export PATH="/opt/rocm-7.1.1/bin:$PATH"
export ROCM_PATH="/opt/rocm-7.1.1"
export DEV=${DEV:-AMD}
export CHECK_OOB=0
export REWRITE_STACK_LIMIT=5000000 HCQDEV_WAIT_TIMEOUT_MS=240000
@@ -20,11 +18,9 @@ export FP8=${FP8:-1}
export ALLREDUCE_CAST=${ALLREDUCE_CAST:-1}
export FAST_CE=${FAST_CE:-1}
export FUSED_INPUT_QUANTIZE=${FUSED_INPUT_QUANTIZE:-1}
export FUSED_GRAD_QUANTIZE=${FUSED_GRAD_QUANTIZE:-1}
export FUSED_ADD_NORM_MUL_QUANTIZE=${FUSED_ADD_NORM_MUL_QUANTIZE:-1}
export FUSED_SILU_W13=${FUSED_SILU_W13:-1}
export SPLIT_W13=${SPLIT_W13:-0}
export OFFLOAD_OPTIM=${OFFLOAD_OPTIM:-0}
export FUSED_PAD_GRAD_ACCUM=${FUSED_PAD_GRAD_ACCUM:-1}
export DEFAULT_FLOAT="bfloat16" OPTIM_DTYPE="bfloat16"
export DP=${DP:-8} MP=${MP:-1} BS=${BS:-16} EVAL_BS=${EVAL_BS:-8} GRADIENT_ACC_STEPS=${GRADIENT_ACC_STEPS:-2}
@@ -48,7 +44,7 @@ export BEAM_UOPS_MAX=6000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGR
export FAKEDATA=${FAKEDATA:-1} BENCHMARK=${BENCHMARK:-10}
if [ -z "$FULL_LAYERS" ]; then
export LLAMA_LAYERS=${LLAMA_LAYERS:-2}
export LLAMA_LAYERS=2
fi
python3 examples/mlperf/model_train.py
@@ -1,54 +0,0 @@
#!/usr/bin/env bash
export PYTHONPATH="."
export PATH="/opt/rocm-7.1.1/bin:$PATH"
export ROCM_PATH="/opt/rocm-7.1.1"
export DEV=${DEV:-AMD}
export CHECK_OOB=0
export REWRITE_STACK_LIMIT=5000000 HCQDEV_WAIT_TIMEOUT_MS=240000
export DEVICE_IN_FUNCTION_BUG=1
export DEBUG=${DEBUG:-2}
export HK_FLASH_ATTENTION=${HK_FLASH_ATTENTION:-1}
export ALL2ALL=${ALL2ALL:-1}
export LATE_ALLREDUCE=${LATE_ALLREDUCE:-1}
export USE_ATOMICS=${USE_ATOMICS:-1}
export ASM_GEMM=${ASM_GEMM:-1}
export WQKV=${WQKV:-1}
export MASTER_WEIGHTS=${MASTER_WEIGHTS:-1}
export FP8=${FP8:-1}
export ALLREDUCE_CAST=${ALLREDUCE_CAST:-1}
export FAST_CE=${FAST_CE:-0}
export FUSED_INPUT_QUANTIZE=${FUSED_INPUT_QUANTIZE:-0}
export FUSED_GRAD_QUANTIZE=${FUSED_GRAD_QUANTIZE:-0}
export FUSED_ADD_NORM_MUL_QUANTIZE=${FUSED_ADD_NORM_MUL_QUANTIZE:-0}
export FUSED_SILU_W13=${FUSED_SILU_W13:-0}
export SPLIT_W13=${SPLIT_W13:-1}
export OFFLOAD_OPTIM=${OFFLOAD_OPTIM:-1}
export DEFAULT_FLOAT="bfloat16" OPTIM_DTYPE="bfloat16"
export DP=${DP:-1} MP=${MP:-8} BS=${BS:-1} EVAL_BS=${EVAL_BS:-1} GRADIENT_ACC_STEPS=${GRADIENT_ACC_STEPS:-2}
export GBS=$((BS * GRADIENT_ACC_STEPS))
export MODEL="llama3"
export BASEDIR="/raid/datasets/c4-8b/"
export SMALL=1
export LLAMA3_SIZE=${LLAMA3_SIZE:-"8B"}
export EVAL_TARGET=3.3 EVAL_FREQ=12288
export LR="1e-3" END_LR="1e-4" WARMUP_SAMPLES=4096 MAX_STEPS=1200000
export WARMUP_STEPS=$((WARMUP_SAMPLES / GBS))
export SAMPLES=$((MAX_STEPS * GBS))
export SEQLEN=${SEQLEN:-8192}
export SEED=${SEED:-5760}
export DATA_SEED=${DATA_SEED:-5760}
export JITBEAM=${JITBEAM:-3}
export BEAM_UOPS_MAX=6000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5 BEAM_PADTO=1
export FAKEDATA=${FAKEDATA:-1} BENCHMARK=${BENCHMARK:-10}
if [ -z "$FULL_LAYERS" ]; then
export LLAMA_LAYERS=${LLAMA_LAYERS:-2}
fi
python3 examples/mlperf/model_train.py
@@ -1,8 +1,6 @@
#!/usr/bin/env bash
export PYTHONPATH="."
export PATH="/opt/rocm-7.1.1/bin:$PATH"
export ROCM_PATH="/opt/rocm-7.1.1"
export DEV=${DEV:-AMD}
export CHECK_OOB=0
export REWRITE_STACK_LIMIT=5000000 HCQDEV_WAIT_TIMEOUT_MS=240000
@@ -20,11 +18,9 @@ export FP8=${FP8:-1}
export ALLREDUCE_CAST=${ALLREDUCE_CAST:-1}
export FAST_CE=${FAST_CE:-1}
export FUSED_INPUT_QUANTIZE=${FUSED_INPUT_QUANTIZE:-1}
export FUSED_GRAD_QUANTIZE=${FUSED_GRAD_QUANTIZE:-1}
export FUSED_ADD_NORM_MUL_QUANTIZE=${FUSED_ADD_NORM_MUL_QUANTIZE:-1}
export FUSED_SILU_W13=${FUSED_SILU_W13:-1}
export SPLIT_W13=${SPLIT_W13:-0}
export OFFLOAD_OPTIM=${OFFLOAD_OPTIM:-0}
export FUSED_PAD_GRAD_ACCUM=${FUSED_PAD_GRAD_ACCUM:-1}
export DEFAULT_FLOAT="bfloat16" OPTIM_DTYPE="bfloat16"
export DP=${DP:-8} MP=${MP:-1} BS=${BS:-16} EVAL_BS=${EVAL_BS:-8} GRADIENT_ACC_STEPS=${GRADIENT_ACC_STEPS:-2}
@@ -1,49 +0,0 @@
#!/usr/bin/env bash
export PYTHONPATH="."
export PATH="/opt/rocm-7.1.1/bin:$PATH"
export ROCM_PATH="/opt/rocm-7.1.1"
export DEV=${DEV:-AMD}
export CHECK_OOB=0
export REWRITE_STACK_LIMIT=5000000 HCQDEV_WAIT_TIMEOUT_MS=240000
export DEVICE_IN_FUNCTION_BUG=1
export DEBUG=${DEBUG:-0}
export HK_FLASH_ATTENTION=${HK_FLASH_ATTENTION:-1}
export ALL2ALL=${ALL2ALL:-1}
export LATE_ALLREDUCE=${LATE_ALLREDUCE:-1}
export USE_ATOMICS=${USE_ATOMICS:-1}
export ASM_GEMM=${ASM_GEMM:-1}
export WQKV=${WQKV:-1}
export MASTER_WEIGHTS=${MASTER_WEIGHTS:-1}
export FP8=${FP8:-1}
export ALLREDUCE_CAST=${ALLREDUCE_CAST:-1}
export FAST_CE=${FAST_CE:-0}
export FUSED_INPUT_QUANTIZE=${FUSED_INPUT_QUANTIZE:-0}
export FUSED_GRAD_QUANTIZE=${FUSED_GRAD_QUANTIZE:-0}
export FUSED_ADD_NORM_MUL_QUANTIZE=${FUSED_ADD_NORM_MUL_QUANTIZE:-0}
export FUSED_SILU_W13=${FUSED_SILU_W13:-0}
export SPLIT_W13=${SPLIT_W13:-1}
export OFFLOAD_OPTIM=${OFFLOAD_OPTIM:-1}
export DEFAULT_FLOAT="bfloat16" OPTIM_DTYPE="bfloat16"
export DP=${DP:-1} MP=${MP:-8} BS=${BS:-1} EVAL_BS=${EVAL_BS:-1} GRADIENT_ACC_STEPS=${GRADIENT_ACC_STEPS:-32}
export GBS=$((BS * GRADIENT_ACC_STEPS))
export MODEL="llama3"
export BASEDIR="/raid/datasets/c4-8b/"
export SMALL=1
export LLAMA3_SIZE=${LLAMA3_SIZE:-"8B"}
export EVAL_TARGET=3.3 EVAL_FREQ=12288
export LR="1e-3" END_LR="1e-4" WARMUP_SAMPLES=4096 MAX_STEPS=1200000
export WARMUP_STEPS=$((WARMUP_SAMPLES / GBS))
export SAMPLES=$((MAX_STEPS * GBS))
export SEQLEN=${SEQLEN:-8192}
export SEED=${SEED:-$RANDOM}
export DATA_SEED=${DATA_SEED:-5760}
export JITBEAM=${JITBEAM:-3}
export BEAM_UOPS_MAX=6000 BEAM_UPCAST_MAX=256 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5 BEAM_PADTO=1
python3 examples/mlperf/model_train.py
@@ -1,5 +1,6 @@
#!/bin/bash
export BENCHMARK=${BENCHMARK:-5}
export BENCHMARK=5
export EVAL_BS=0
VIZ=${VIZ:--1} FULL_LAYERS=1 DEBUG=${DEBUG:--0} examples/mlperf/training_submission_v6.0/tinycorp/benchmarks/llama31_8b/implementations/tinybox_8xMI350X/dev_beam.sh
[ "$BENCHMARK" -le 3 ] || [[ $DEV == NULL* ]] || python -m tinygrad.viz.cli -s AMD -t --interval "train @ 2" "train @ 3"
VIZ=${VIZ:--1} FULL_LAYERS=1 DEBUG=0 examples/mlperf/training_submission_v6.0/tinycorp/benchmarks/llama8b/implementations/tinybox_8xMI350X/dev_beam.sh
SRC="AMD"; [[ $DEV == NULL* ]] && SRC="NULL"
python -m tinygrad.viz.cli -s "$SRC" -t
@@ -3,8 +3,6 @@ set -e # Exit on any error
set -o pipefail # Make pipeline fail if any command fails
export PYTHONPATH="."
export PATH="/opt/rocm-7.1.1/bin:$PATH"
export ROCM_PATH="/opt/rocm-7.1.1"
export DEV=AMD
export CHECK_OOB=0
export REWRITE_STACK_LIMIT=5000000 HCQDEV_WAIT_TIMEOUT_MS=240000
@@ -21,10 +19,9 @@ export FP8=1
export ALLREDUCE_CAST=1
export FAST_CE=1
export FUSED_INPUT_QUANTIZE=1
export FUSED_GRAD_QUANTIZE=1
export FUSED_ADD_NORM_MUL_QUANTIZE=1
export FUSED_SILU_W13=1
export SPLIT_W13=0
export FUSED_PAD_GRAD_ACCUM=1
export DEFAULT_FLOAT="bfloat16" OPTIM_DTYPE="bfloat16"
export DP=8 MP=1 BS=16 EVAL_BS=8 GRADIENT_ACC_STEPS=2
@@ -4,7 +4,7 @@ export EVAL_BS=0
export FAKEDATA=1
export NULL_ALLOW_COPYOUT=1
export HIP_VISIBLE_DEVICES=""
export DEV=NULL:HIP:gfx950
export DEV=NULL
export JITBEAM=0
export LLAMA_LAYERS=${LLAMA_LAYERS:-"2"}
time examples/mlperf/training_submission_v6.0/tinycorp/benchmarks/llama31_8b/implementations/tinybox_8xMI350X/dev_run.sh
time examples/mlperf/training_submission_v6.0/tinycorp/benchmarks/llama8b/implementations/tinybox_8xMI350X/dev_run.sh
@@ -1,50 +0,0 @@
# 1. Problem
This problem uses the ResNet-50 CNN to do image classification.
## Requirements
Install tinygrad and mlperf-logging from master.
```
git clone https://github.com/tinygrad/tinygrad.git
python3 -m pip install -e ".[mlperf]"
```
### tinybox_green
Install the p2p driver per [README](https://github.com/tinygrad/open-gpu-kernel-modules/blob/550.54.15-p2p/README.md)
This is the default on production tinybox green.
### tinybox_red
Disable cwsr
This is the default on production tinybox red.
```
sudo vi /etc/modprobe.d/amdgpu.conf
cat <<EOF > /etc/modprobe.d/amdgpu.conf
options amdgpu cwsr_enable=0
EOF
sudo update-initramfs -u
sudo reboot
# validate
sudo cat /sys/module/amdgpu/parameters/cwsr_enable #= 0
```
# 2. Directions
## Steps to download and verify data
```
IMGNET_TRAIN=1 python3 extra/datasets/imagenet_download.py
```
## Steps for one time setup
### tinybox_red
```
examples/mlperf/training_submission_v4.0/tinycorp/benchmarks/resnet/implementations/tinybox_red/setup.sh
```
## Steps to run benchmark
```
examples/mlperf/training_submission_v4.0/tinycorp/benchmarks/resnet/implementations/tinybox_red/run_and_time.sh
```
@@ -1,13 +0,0 @@
#!/bin/bash
export PYTHONPATH="." DEV=NV
export MODEL="resnet"
export DEFAULT_FLOAT="HALF" GPUS=6 BS=1536 EVAL_BS=192
export RESET_STEP=0
export TRAIN_BEAM=4 IGNORE_JIT_FIRST_BEAM=1 BEAM_UOPS_MAX=1500 BEAM_UPCAST_MAX=64 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=10 BEAM_PADTO=0
export BENCHMARK=10 DEBUG=2
python3 examples/mlperf/model_train.py
@@ -1,15 +0,0 @@
#!/bin/bash
export PYTHONPATH="." DEV=NV
export MODEL="resnet"
export DEFAULT_FLOAT="HALF" GPUS=6 BS=1536 EVAL_BS=192
export RESET_STEP=0
export TRAIN_BEAM=4 IGNORE_JIT_FIRST_BEAM=1 BEAM_UOPS_MAX=1500 BEAM_UPCAST_MAX=64 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=10 BEAM_PADTO=0
export EVAL_START_EPOCH=3 EVAL_FREQ=4
export WANDB=1 PARALLEL=0
python3 examples/mlperf/model_train.py
@@ -1,25 +0,0 @@
#!/bin/bash
set -e # Exit on any error
set -o pipefail # Make pipeline fail if any command fails
export PYTHONPATH="." DEV=NV
export MODEL="resnet"
export SUBMISSION_PLATFORM="tinybox_green"
export DEFAULT_FLOAT="HALF" GPUS=6 BS=1536 EVAL_BS=192
export RESET_STEP=0
export TRAIN_BEAM=4 IGNORE_JIT_FIRST_BEAM=1 BEAM_UOPS_MAX=1500 BEAM_UPCAST_MAX=64 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=10 BEAM_PADTO=0
# pip install -e ".[mlperf]"
export LOGMLPERF=${LOGMLPERF:-1}
export SEED=$RANDOM
DATETIME=$(date "+%m%d%H%M")
LOGFILE="resnet_green_${DATETIME}_${SEED}.log"
# init
BENCHMARK=10 INITMLPERF=1 python3 examples/mlperf/model_train.py | tee $LOGFILE
# run
PARALLEL=0 RUNMLPERF=1 EVAL_START_EPOCH=3 EVAL_FREQ=4 python3 examples/mlperf/model_train.py | tee -a $LOGFILE
@@ -1,50 +0,0 @@
# 1. Problem
This problem uses the ResNet-50 CNN to do image classification.
## Requirements
Install tinygrad and mlperf-logging from master.
```
git clone https://github.com/tinygrad/tinygrad.git
python3 -m pip install -e ".[mlperf]"
```
### tinybox_green
Install the p2p driver per [README](https://github.com/tinygrad/open-gpu-kernel-modules/blob/550.54.15-p2p/README.md)
This is the default on production tinybox green.
### tinybox_red
Disable cwsr
This is the default on production tinybox red.
```
sudo vi /etc/modprobe.d/amdgpu.conf
cat <<EOF > /etc/modprobe.d/amdgpu.conf
options amdgpu cwsr_enable=0
EOF
sudo update-initramfs -u
sudo reboot
# validate
sudo cat /sys/module/amdgpu/parameters/cwsr_enable #= 0
```
# 2. Directions
## Steps to download and verify data
```
IMGNET_TRAIN=1 python3 extra/datasets/imagenet_download.py
```
## Steps for one time setup
### tinybox_red
```
examples/mlperf/training_submission_v4.0/tinycorp/benchmarks/resnet/implementations/tinybox_red/setup.sh
```
## Steps to run benchmark
```
examples/mlperf/training_submission_v4.0/tinycorp/benchmarks/resnet/implementations/tinybox_red/run_and_time.sh
```
@@ -1,13 +0,0 @@
#!/bin/bash
export PYTHONPATH="." DEV=AMD
export MODEL="resnet"
export DEFAULT_FLOAT="HALF" GPUS=6 BS=1536 EVAL_BS=192
export RESET_STEP=0
export TRAIN_BEAM=4 IGNORE_JIT_FIRST_BEAM=1 BEAM_UOPS_MAX=2000 BEAM_UPCAST_MAX=96 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5 BEAM_PADTO=0
export BENCHMARK=10 DEBUG=${DEBUG:-2}
python3 examples/mlperf/model_train.py
@@ -1,15 +0,0 @@
#!/bin/bash
export PYTHONPATH="." DEV=AMD
export MODEL="resnet"
export DEFAULT_FLOAT="HALF" GPUS=6 BS=1536 EVAL_BS=192
export RESET_STEP=0
export TRAIN_BEAM=4 IGNORE_JIT_FIRST_BEAM=1 BEAM_UOPS_MAX=2000 BEAM_UPCAST_MAX=96 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5 BEAM_PADTO=0
export EVAL_START_EPOCH=3 EVAL_FREQ=4
export WANDB=1 PARALLEL=0
python3 examples/mlperf/model_train.py
@@ -1,26 +0,0 @@
#!/bin/bash
set -e # Exit on any error
set -o pipefail # Make pipeline fail if any command fails
export PYTHONPATH="." DEV=AMD
export MODEL="resnet"
export SUBMISSION_PLATFORM="tinybox_red"
export DEFAULT_FLOAT="HALF" GPUS=6 BS=1536 EVAL_BS=192
export RESET_STEP=0
export TRAIN_BEAM=4 IGNORE_JIT_FIRST_BEAM=1 BEAM_UOPS_MAX=2000 BEAM_UPCAST_MAX=96 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5 BEAM_PADTO=0
# pip install -e ".[mlperf]"
export LOGMLPERF=${LOGMLPERF:-1}
export SEED=$RANDOM
DATETIME=$(date "+%m%d%H%M")
LOGFILE="resnet_red_${DATETIME}_${SEED}.log"
# init
sleep 5 && sudo rmmod amdgpu || true
BENCHMARK=10 INITMLPERF=1 python3 examples/mlperf/model_train.py | tee $LOGFILE
# run
PARALLEL=0 RUNMLPERF=1 EVAL_START_EPOCH=3 EVAL_FREQ=4 python3 examples/mlperf/model_train.py | tee -a $LOGFILE
@@ -1,8 +0,0 @@
#!/bin/bash
rocm-smi --setprofile compute
rocm-smi --setmclk 3
rocm-smi --setperflevel high
# power cap to 350W
echo "350000000" | sudo tee /sys/class/drm/card{1..6}/device/hwmon/hwmon*/power1_cap
@@ -1,38 +0,0 @@
# 1. Problem
This problem uses RetinaNet for SSD.
## Requirements
Install tinygrad and mlperf-logging (uncomment mlperf from setup.py) from branch mlperf_training_v5.0.
```
git clone https://github.com/tinygrad/tinygrad.git
python3 -m pip install -e ".[mlperf]"
```
Also install the following dependencies:
```
pip install tqdm numpy pycocotools boto3 pandas torch torchvision
```
### tinybox_green
Install the p2p driver per [README](https://github.com/tinygrad/open-gpu-kernel-modules/blob/550.54.15-p2p/README.md)
This is the default on production tinybox green.
# 2. Directions
## Steps to download data
Run the following:
```
BASEDIR=/raid/datasets/openimages python3 extra/datasets/openimages.py
```
## Running
### tinybox_green
#### Steps to run benchmark
```
examples/mlperf/training_submission_v5.0/tinycorp/benchmarks/retinanet/implementations/tinybox_green/run_and_time.sh
```
@@ -1,14 +0,0 @@
#!/bin/bash
export PYTHONPATH="." DEV=NV
export MODEL="retinanet"
export DEFAULT_FLOAT="HALF" GPUS=6 BS=96 EVAL_BS=96
export BASEDIR="/raid/datasets/openimages"
# export RESET_STEP=0
export TRAIN_BEAM=2 IGNORE_JIT_FIRST_BEAM=1 BEAM_UOPS_MAX=1500 BEAM_UPCAST_MAX=64 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5 BEAM_PADTO=0
export BENCHMARK=5 DEBUG=2
python examples/mlperf/model_train.py
@@ -1,15 +0,0 @@
#!/bin/bash
export PYTHONPATH="." DEV=NV
export MODEL="retinanet"
export DEFAULT_FLOAT="HALF" GPUS=6 BS=96 EVAL_BS=96
export BASEDIR="/raid/datasets/openimages"
# export RESET_STEP=0
export TRAIN_BEAM=2 IGNORE_JIT_FIRST_BEAM=1 BEAM_UOPS_MAX=1500 BEAM_UPCAST_MAX=64 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5 BEAM_PADTO=0
export WANDB=1 PARALLEL=0
export RUNMLPERF=1
python examples/mlperf/model_train.py
@@ -1,25 +0,0 @@
#!/bin/bash
set -e # Exit on any error
set -o pipefail # Make pipeline fail if any command fails
export PYTHONPATH="." DEV=NV
export MODEL="retinanet"
export SUBMISSION_PLATFORM="tinybox_green"
export DEFAULT_FLOAT="HALF" GPUS=6 BS=96 EVAL_BS=96
export TRAIN_BEAM=2 BEAM_UOPS_MAX=1500 BEAM_UPCAST_MAX=64 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5 BEAM_PADTO=0
export IGNORE_JIT_FIRST_BEAM=1
export BASEDIR="/raid/datasets/openimages"
# pip install -e ".[mlperf]"
export LOGMLPERF=1
export SEED=$RANDOM
DATETIME=$(date "+%m%d%H%M")
LOGFILE="retinanet_green_${DATETIME}_${SEED}.log"
# init
BENCHMARK=10 INITMLPERF=1 python3 examples/mlperf/model_train.py | tee $LOGFILE
# run
PARALLEL=0 RUNMLPERF=1 python3 examples/mlperf/model_train.py | tee -a $LOGFILE
@@ -1,14 +0,0 @@
#!/bin/bash
export PYTHONPATH="." DEV=AMD
export MODEL="retinanet"
export DEFAULT_FLOAT="HALF" GPUS=6 BS=96 EVAL_BS=96
export BASEDIR="/raid/datasets/openimages"
# export RESET_STEP=0
export TRAIN_BEAM=2 IGNORE_JIT_FIRST_BEAM=1 BEAM_UOPS_MAX=1500 BEAM_UPCAST_MAX=64 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5 BEAM_PADTO=0
export BENCHMARK=5 DEBUG=2
python examples/mlperf/model_train.py
@@ -1,15 +0,0 @@
#!/bin/bash
export PYTHONPATH="." DEV=AMD
export MODEL="retinanet"
export DEFAULT_FLOAT="HALF" GPUS=6 BS=96 EVAL_BS=96
export BASEDIR="/raid/datasets/openimages"
# export RESET_STEP=0
export TRAIN_BEAM=2 IGNORE_JIT_FIRST_BEAM=1 BEAM_UOPS_MAX=1500 BEAM_UPCAST_MAX=64 BEAM_LOCAL_MAX=1024 BEAM_MIN_PROGRESS=5 BEAM_PADTO=0
export WANDB=1 PARALLEL=0
export RUNMLPERF=1
python examples/mlperf/model_train.py
@@ -0,0 +1,106 @@
:::MLLOG {"namespace": "", "time_ms": 1778207373785, "event_type": "POINT_IN_TIME", "key": "submission_org", "value": "tinycorp", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1328}}
:::MLLOG {"namespace": "", "time_ms": 1778207373789, "event_type": "POINT_IN_TIME", "key": "submission_platform", "value": "tinybox", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1329}}
:::MLLOG {"namespace": "", "time_ms": 1778207373790, "event_type": "POINT_IN_TIME", "key": "submission_division", "value": "closed", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1330}}
:::MLLOG {"namespace": "", "time_ms": 1778207373790, "event_type": "POINT_IN_TIME", "key": "submission_status", "value": "onprem", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1331}}
:::MLLOG {"namespace": "", "time_ms": 1778207373790, "event_type": "POINT_IN_TIME", "key": "submission_benchmark", "value": "llama31_8b", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1333}}
:::MLLOG {"namespace": "", "time_ms": 1778207373791, "event_type": "POINT_IN_TIME", "key": "cache_clear", "value": true, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1336}}
:::MLLOG {"namespace": "", "time_ms": 1778207373791, "event_type": "INTERVAL_START", "key": "init_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1337}}
:::MLLOG {"namespace": "", "time_ms": 1778207734506, "event_type": "INTERVAL_END", "key": "init_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1629}}
:::MLLOG {"namespace": "", "time_ms": 1778207747904, "event_type": "INTERVAL_START", "key": "run_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1340}}
:::MLLOG {"namespace": "", "time_ms": 1778207747908, "event_type": "POINT_IN_TIME", "key": "seed", "value": 25580, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1341}}
:::MLLOG {"namespace": "", "time_ms": 1778207747908, "event_type": "POINT_IN_TIME", "key": "global_batch_size", "value": 32, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1343}}
:::MLLOG {"namespace": "", "time_ms": 1778207747908, "event_type": "POINT_IN_TIME", "key": "max_sequence_length", "value": 8192, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1344}}
:::MLLOG {"namespace": "", "time_ms": 1778207747908, "event_type": "POINT_IN_TIME", "key": "max_steps", "value": 1200000, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1345}}
:::MLLOG {"namespace": "", "time_ms": 1778207747908, "event_type": "POINT_IN_TIME", "key": "gradient_accumulation_steps", "value": 2, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1346}}
:::MLLOG {"namespace": "", "time_ms": 1778207747908, "event_type": "POINT_IN_TIME", "key": "eval_samples", "value": 1024, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1347}}
:::MLLOG {"namespace": "", "time_ms": 1778207747908, "event_type": "POINT_IN_TIME", "key": "train_samples", "value": 38400000, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1348}}
:::MLLOG {"namespace": "", "time_ms": 1778207747908, "event_type": "POINT_IN_TIME", "key": "opt_name", "value": "adamw", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1350}}
:::MLLOG {"namespace": "", "time_ms": 1778207747908, "event_type": "POINT_IN_TIME", "key": "opt_base_learning_rate", "value": 0.001, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1351}}
:::MLLOG {"namespace": "", "time_ms": 1778207747908, "event_type": "POINT_IN_TIME", "key": "opt_end_learning_rate", "value": 0.0001, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1352}}
:::MLLOG {"namespace": "", "time_ms": 1778207747908, "event_type": "POINT_IN_TIME", "key": "opt_adamw_beta_1", "value": 0.9, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1353}}
:::MLLOG {"namespace": "", "time_ms": 1778207747909, "event_type": "POINT_IN_TIME", "key": "opt_adamw_beta_2", "value": 0.95, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1354}}
:::MLLOG {"namespace": "", "time_ms": 1778207747909, "event_type": "POINT_IN_TIME", "key": "opt_adamw_epsilon", "value": 1e-05, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1355}}
:::MLLOG {"namespace": "", "time_ms": 1778207747909, "event_type": "POINT_IN_TIME", "key": "opt_adamw_weight_decay", "value": 0.1, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1356}}
:::MLLOG {"namespace": "", "time_ms": 1778207747909, "event_type": "POINT_IN_TIME", "key": "opt_learning_rate_warmup_steps", "value": 128, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1357}}
:::MLLOG {"namespace": "", "time_ms": 1778207747909, "event_type": "POINT_IN_TIME", "key": "num_warmup_steps", "value": 128, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1358}}
:::MLLOG {"namespace": "", "time_ms": 1778207747909, "event_type": "POINT_IN_TIME", "key": "opt_learning_rate_decay_steps", "value": 1199872, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1359}}
:::MLLOG {"namespace": "", "time_ms": 1778207747909, "event_type": "POINT_IN_TIME", "key": "opt_learning_rate_decay_schedule", "value": "cosine with linear warmup", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1360}}
:::MLLOG {"namespace": "", "time_ms": 1778207747909, "event_type": "POINT_IN_TIME", "key": "opt_gradient_clip_norm", "value": 1.0, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1361}}
:::MLLOG {"namespace": "", "time_ms": 1778208080716, "event_type": "INTERVAL_START", "key": "epoch_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1529, "samples_count": 0}}
:::MLLOG {"namespace": "", "time_ms": 1778208080717, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1530, "samples_count": 0}}
:::MLLOG {"namespace": "", "time_ms": 1778208901302, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778208901303, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778208952059, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 5.705078125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778208952060, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778208952060, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778209608282, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778209608282, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778209637796, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 4.552001953125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778209637796, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778209637797, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778210294879, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778210294879, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778210324584, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 4.1011962890625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778210324584, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778210324585, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778210980564, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778210980565, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778211010225, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.8807373046875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778211010225, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778211010226, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778211667184, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778211667185, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778211696784, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.7498779296875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778211696785, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778211696786, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778212356059, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778212356060, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778212385775, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.65478515625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778212385776, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778212385776, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778213044774, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778213044775, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778213074311, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.5731201171875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778213074312, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778213074313, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778213732225, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778213732225, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778213761806, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.5137939453125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778213761806, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778213761807, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778214419768, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778214419769, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778214449443, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.46630859375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778214449444, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778214449445, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778215112018, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778215112019, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778215141586, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.428955078125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778215141586, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778215141587, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778215794970, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778215794970, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778215824346, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.390869140625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778215824346, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778215824347, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778216475810, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778216475810, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778216505269, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.361328125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778216505269, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778216505270, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778217157389, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778217157390, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778217186831, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.346923828125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778217186832, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778217186832, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778217846265, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778217846266, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778217876013, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.3133544921875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778217876014, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778217876014, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778218532377, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778218532378, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778218561863, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.2989501953125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778218561863, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778218561864, "event_type": "INTERVAL_END", "key": "epoch_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1646, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778218561864, "event_type": "INTERVAL_END", "key": "run_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1647, "status": "success"}}
@@ -0,0 +1,111 @@
:::MLLOG {"namespace": "", "time_ms": 1778218577779, "event_type": "POINT_IN_TIME", "key": "submission_org", "value": "tinycorp", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1328}}
:::MLLOG {"namespace": "", "time_ms": 1778218577783, "event_type": "POINT_IN_TIME", "key": "submission_platform", "value": "tinybox", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1329}}
:::MLLOG {"namespace": "", "time_ms": 1778218577784, "event_type": "POINT_IN_TIME", "key": "submission_division", "value": "closed", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1330}}
:::MLLOG {"namespace": "", "time_ms": 1778218577784, "event_type": "POINT_IN_TIME", "key": "submission_status", "value": "onprem", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1331}}
:::MLLOG {"namespace": "", "time_ms": 1778218577784, "event_type": "POINT_IN_TIME", "key": "submission_benchmark", "value": "llama31_8b", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1333}}
:::MLLOG {"namespace": "", "time_ms": 1778218578371, "event_type": "POINT_IN_TIME", "key": "cache_clear", "value": true, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1336}}
:::MLLOG {"namespace": "", "time_ms": 1778218578371, "event_type": "INTERVAL_START", "key": "init_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1337}}
:::MLLOG {"namespace": "", "time_ms": 1778218957180, "event_type": "INTERVAL_END", "key": "init_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1629}}
:::MLLOG {"namespace": "", "time_ms": 1778218971058, "event_type": "INTERVAL_START", "key": "run_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1340}}
:::MLLOG {"namespace": "", "time_ms": 1778218971063, "event_type": "POINT_IN_TIME", "key": "seed", "value": 356, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1341}}
:::MLLOG {"namespace": "", "time_ms": 1778218971063, "event_type": "POINT_IN_TIME", "key": "global_batch_size", "value": 32, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1343}}
:::MLLOG {"namespace": "", "time_ms": 1778218971063, "event_type": "POINT_IN_TIME", "key": "max_sequence_length", "value": 8192, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1344}}
:::MLLOG {"namespace": "", "time_ms": 1778218971063, "event_type": "POINT_IN_TIME", "key": "max_steps", "value": 1200000, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1345}}
:::MLLOG {"namespace": "", "time_ms": 1778218971063, "event_type": "POINT_IN_TIME", "key": "gradient_accumulation_steps", "value": 2, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1346}}
:::MLLOG {"namespace": "", "time_ms": 1778218971063, "event_type": "POINT_IN_TIME", "key": "eval_samples", "value": 1024, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1347}}
:::MLLOG {"namespace": "", "time_ms": 1778218971063, "event_type": "POINT_IN_TIME", "key": "train_samples", "value": 38400000, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1348}}
:::MLLOG {"namespace": "", "time_ms": 1778218971063, "event_type": "POINT_IN_TIME", "key": "opt_name", "value": "adamw", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1350}}
:::MLLOG {"namespace": "", "time_ms": 1778218971063, "event_type": "POINT_IN_TIME", "key": "opt_base_learning_rate", "value": 0.001, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1351}}
:::MLLOG {"namespace": "", "time_ms": 1778218971063, "event_type": "POINT_IN_TIME", "key": "opt_end_learning_rate", "value": 0.0001, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1352}}
:::MLLOG {"namespace": "", "time_ms": 1778218971063, "event_type": "POINT_IN_TIME", "key": "opt_adamw_beta_1", "value": 0.9, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1353}}
:::MLLOG {"namespace": "", "time_ms": 1778218971063, "event_type": "POINT_IN_TIME", "key": "opt_adamw_beta_2", "value": 0.95, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1354}}
:::MLLOG {"namespace": "", "time_ms": 1778218971063, "event_type": "POINT_IN_TIME", "key": "opt_adamw_epsilon", "value": 1e-05, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1355}}
:::MLLOG {"namespace": "", "time_ms": 1778218971064, "event_type": "POINT_IN_TIME", "key": "opt_adamw_weight_decay", "value": 0.1, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1356}}
:::MLLOG {"namespace": "", "time_ms": 1778218971064, "event_type": "POINT_IN_TIME", "key": "opt_learning_rate_warmup_steps", "value": 128, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1357}}
:::MLLOG {"namespace": "", "time_ms": 1778218971064, "event_type": "POINT_IN_TIME", "key": "num_warmup_steps", "value": 128, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1358}}
:::MLLOG {"namespace": "", "time_ms": 1778218971064, "event_type": "POINT_IN_TIME", "key": "opt_learning_rate_decay_steps", "value": 1199872, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1359}}
:::MLLOG {"namespace": "", "time_ms": 1778218971064, "event_type": "POINT_IN_TIME", "key": "opt_learning_rate_decay_schedule", "value": "cosine with linear warmup", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1360}}
:::MLLOG {"namespace": "", "time_ms": 1778218971064, "event_type": "POINT_IN_TIME", "key": "opt_gradient_clip_norm", "value": 1.0, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1361}}
:::MLLOG {"namespace": "", "time_ms": 1778219289653, "event_type": "INTERVAL_START", "key": "epoch_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1529, "samples_count": 0}}
:::MLLOG {"namespace": "", "time_ms": 1778219289654, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1530, "samples_count": 0}}
:::MLLOG {"namespace": "", "time_ms": 1778220097041, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778220097042, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778220141757, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 5.743896484375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778220141758, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778220141758, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778220795772, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778220795773, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778220825439, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 4.58349609375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778220825440, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778220825440, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778221480609, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778221480610, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778221510284, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 4.1131591796875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778221510285, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778221510286, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778222164664, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778222164665, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778222194290, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.8935546875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778222194291, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778222194291, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778222848846, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778222848847, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778222878557, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.7567138671875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778222878558, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778222878558, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778223532447, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778223532447, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778223562036, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.658203125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778223562037, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778223562037, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778224215343, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778224215344, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778224244924, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.5860595703125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778224244925, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778224244925, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778224898378, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778224898379, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778224928021, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.51708984375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778224928021, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778224928022, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778225581424, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778225581425, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778225611002, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.471923828125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778225611003, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778225611003, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778226265043, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778226265044, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778226294659, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.43701171875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778226294660, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778226294661, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778226949577, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778226949577, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778226979238, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.5406494140625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778226979239, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778226979239, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778227635352, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778227635352, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778227664978, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.3836669921875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778227664978, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778227664979, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778228323150, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778228323151, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778228352865, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.355712890625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778228352865, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778228352866, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778229010307, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778229010307, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778229040142, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.3319091796875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778229040143, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778229040143, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778229696378, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778229696379, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778229726195, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.30615234375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778229726195, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778229726196, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778230383239, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 196608}}
:::MLLOG {"namespace": "", "time_ms": 1778230383240, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 196608}}
:::MLLOG {"namespace": "", "time_ms": 1778230412831, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.29052734375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 196608}}
:::MLLOG {"namespace": "", "time_ms": 1778230412832, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 196608}}
:::MLLOG {"namespace": "", "time_ms": 1778230412832, "event_type": "INTERVAL_END", "key": "epoch_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1646, "samples_count": 196608}}
:::MLLOG {"namespace": "", "time_ms": 1778230412833, "event_type": "INTERVAL_END", "key": "run_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1647, "status": "success"}}
@@ -0,0 +1,111 @@
:::MLLOG {"namespace": "", "time_ms": 1778230427283, "event_type": "POINT_IN_TIME", "key": "submission_org", "value": "tinycorp", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1328}}
:::MLLOG {"namespace": "", "time_ms": 1778230427287, "event_type": "POINT_IN_TIME", "key": "submission_platform", "value": "tinybox", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1329}}
:::MLLOG {"namespace": "", "time_ms": 1778230427287, "event_type": "POINT_IN_TIME", "key": "submission_division", "value": "closed", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1330}}
:::MLLOG {"namespace": "", "time_ms": 1778230427287, "event_type": "POINT_IN_TIME", "key": "submission_status", "value": "onprem", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1331}}
:::MLLOG {"namespace": "", "time_ms": 1778230427287, "event_type": "POINT_IN_TIME", "key": "submission_benchmark", "value": "llama31_8b", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1333}}
:::MLLOG {"namespace": "", "time_ms": 1778230427939, "event_type": "POINT_IN_TIME", "key": "cache_clear", "value": true, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1336}}
:::MLLOG {"namespace": "", "time_ms": 1778230427939, "event_type": "INTERVAL_START", "key": "init_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1337}}
:::MLLOG {"namespace": "", "time_ms": 1778230779581, "event_type": "INTERVAL_END", "key": "init_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1629}}
:::MLLOG {"namespace": "", "time_ms": 1778230792886, "event_type": "INTERVAL_START", "key": "run_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1340}}
:::MLLOG {"namespace": "", "time_ms": 1778230792890, "event_type": "POINT_IN_TIME", "key": "seed", "value": 2774, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1341}}
:::MLLOG {"namespace": "", "time_ms": 1778230792891, "event_type": "POINT_IN_TIME", "key": "global_batch_size", "value": 32, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1343}}
:::MLLOG {"namespace": "", "time_ms": 1778230792891, "event_type": "POINT_IN_TIME", "key": "max_sequence_length", "value": 8192, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1344}}
:::MLLOG {"namespace": "", "time_ms": 1778230792891, "event_type": "POINT_IN_TIME", "key": "max_steps", "value": 1200000, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1345}}
:::MLLOG {"namespace": "", "time_ms": 1778230792891, "event_type": "POINT_IN_TIME", "key": "gradient_accumulation_steps", "value": 2, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1346}}
:::MLLOG {"namespace": "", "time_ms": 1778230792891, "event_type": "POINT_IN_TIME", "key": "eval_samples", "value": 1024, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1347}}
:::MLLOG {"namespace": "", "time_ms": 1778230792891, "event_type": "POINT_IN_TIME", "key": "train_samples", "value": 38400000, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1348}}
:::MLLOG {"namespace": "", "time_ms": 1778230792891, "event_type": "POINT_IN_TIME", "key": "opt_name", "value": "adamw", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1350}}
:::MLLOG {"namespace": "", "time_ms": 1778230792891, "event_type": "POINT_IN_TIME", "key": "opt_base_learning_rate", "value": 0.001, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1351}}
:::MLLOG {"namespace": "", "time_ms": 1778230792891, "event_type": "POINT_IN_TIME", "key": "opt_end_learning_rate", "value": 0.0001, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1352}}
:::MLLOG {"namespace": "", "time_ms": 1778230792891, "event_type": "POINT_IN_TIME", "key": "opt_adamw_beta_1", "value": 0.9, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1353}}
:::MLLOG {"namespace": "", "time_ms": 1778230792891, "event_type": "POINT_IN_TIME", "key": "opt_adamw_beta_2", "value": 0.95, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1354}}
:::MLLOG {"namespace": "", "time_ms": 1778230792891, "event_type": "POINT_IN_TIME", "key": "opt_adamw_epsilon", "value": 1e-05, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1355}}
:::MLLOG {"namespace": "", "time_ms": 1778230792892, "event_type": "POINT_IN_TIME", "key": "opt_adamw_weight_decay", "value": 0.1, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1356}}
:::MLLOG {"namespace": "", "time_ms": 1778230792892, "event_type": "POINT_IN_TIME", "key": "opt_learning_rate_warmup_steps", "value": 128, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1357}}
:::MLLOG {"namespace": "", "time_ms": 1778230792892, "event_type": "POINT_IN_TIME", "key": "num_warmup_steps", "value": 128, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1358}}
:::MLLOG {"namespace": "", "time_ms": 1778230792892, "event_type": "POINT_IN_TIME", "key": "opt_learning_rate_decay_steps", "value": 1199872, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1359}}
:::MLLOG {"namespace": "", "time_ms": 1778230792892, "event_type": "POINT_IN_TIME", "key": "opt_learning_rate_decay_schedule", "value": "cosine with linear warmup", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1360}}
:::MLLOG {"namespace": "", "time_ms": 1778230792892, "event_type": "POINT_IN_TIME", "key": "opt_gradient_clip_norm", "value": 1.0, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1361}}
:::MLLOG {"namespace": "", "time_ms": 1778231115792, "event_type": "INTERVAL_START", "key": "epoch_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1529, "samples_count": 0}}
:::MLLOG {"namespace": "", "time_ms": 1778231115793, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1530, "samples_count": 0}}
:::MLLOG {"namespace": "", "time_ms": 1778232030906, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778232030907, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778232075494, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 5.812255859375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778232075494, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778232075495, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778232729579, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778232729580, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778232759140, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 4.582275390625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778232759141, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778232759142, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778233413630, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778233413631, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778233443219, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 4.11767578125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778233443220, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778233443220, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778234097427, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778234097428, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778234127034, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.9005126953125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778234127034, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778234127035, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778234780955, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778234780956, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778234810558, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.7586669921875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778234810558, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778234810559, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778235463904, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778235463905, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778235493473, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.657958984375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778235493474, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778235493475, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778236147005, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778236147005, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778236176551, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.585693359375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778236176552, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778236176552, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778236830530, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778236830530, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778236860107, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.521484375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778236860108, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778236860108, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778237514002, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778237514003, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778237543592, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.4742431640625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778237543592, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778237543593, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778238197935, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778238197936, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778238227501, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.428955078125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778238227502, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778238227503, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778238882036, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778238882037, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778238911645, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.4019775390625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778238911645, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778238911646, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778239565129, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778239565130, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778239594721, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.37890625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778239594722, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778239594722, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778240248763, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778240248764, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778240278335, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.3448486328125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778240278336, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778240278337, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778240933651, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778240933651, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778240963429, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.325439453125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778240963430, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778240963431, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778241626264, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778241626265, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778241656303, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.3072509765625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778241656304, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778241656304, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778242315322, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 196608}}
:::MLLOG {"namespace": "", "time_ms": 1778242315323, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 196608}}
:::MLLOG {"namespace": "", "time_ms": 1778242345178, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.2781982421875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 196608}}
:::MLLOG {"namespace": "", "time_ms": 1778242345178, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 196608}}
:::MLLOG {"namespace": "", "time_ms": 1778242345179, "event_type": "INTERVAL_END", "key": "epoch_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1646, "samples_count": 196608}}
:::MLLOG {"namespace": "", "time_ms": 1778242345179, "event_type": "INTERVAL_END", "key": "run_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1647, "status": "success"}}
@@ -0,0 +1,106 @@
:::MLLOG {"namespace": "", "time_ms": 1778242359541, "event_type": "POINT_IN_TIME", "key": "submission_org", "value": "tinycorp", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1328}}
:::MLLOG {"namespace": "", "time_ms": 1778242359545, "event_type": "POINT_IN_TIME", "key": "submission_platform", "value": "tinybox", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1329}}
:::MLLOG {"namespace": "", "time_ms": 1778242359545, "event_type": "POINT_IN_TIME", "key": "submission_division", "value": "closed", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1330}}
:::MLLOG {"namespace": "", "time_ms": 1778242359545, "event_type": "POINT_IN_TIME", "key": "submission_status", "value": "onprem", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1331}}
:::MLLOG {"namespace": "", "time_ms": 1778242359545, "event_type": "POINT_IN_TIME", "key": "submission_benchmark", "value": "llama31_8b", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1333}}
:::MLLOG {"namespace": "", "time_ms": 1778242360117, "event_type": "POINT_IN_TIME", "key": "cache_clear", "value": true, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1336}}
:::MLLOG {"namespace": "", "time_ms": 1778242360118, "event_type": "INTERVAL_START", "key": "init_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1337}}
:::MLLOG {"namespace": "", "time_ms": 1778242702158, "event_type": "INTERVAL_END", "key": "init_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1629}}
:::MLLOG {"namespace": "", "time_ms": 1778242715949, "event_type": "INTERVAL_START", "key": "run_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1340}}
:::MLLOG {"namespace": "", "time_ms": 1778242715953, "event_type": "POINT_IN_TIME", "key": "seed", "value": 1261, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1341}}
:::MLLOG {"namespace": "", "time_ms": 1778242715953, "event_type": "POINT_IN_TIME", "key": "global_batch_size", "value": 32, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1343}}
:::MLLOG {"namespace": "", "time_ms": 1778242715953, "event_type": "POINT_IN_TIME", "key": "max_sequence_length", "value": 8192, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1344}}
:::MLLOG {"namespace": "", "time_ms": 1778242715954, "event_type": "POINT_IN_TIME", "key": "max_steps", "value": 1200000, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1345}}
:::MLLOG {"namespace": "", "time_ms": 1778242715954, "event_type": "POINT_IN_TIME", "key": "gradient_accumulation_steps", "value": 2, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1346}}
:::MLLOG {"namespace": "", "time_ms": 1778242715954, "event_type": "POINT_IN_TIME", "key": "eval_samples", "value": 1024, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1347}}
:::MLLOG {"namespace": "", "time_ms": 1778242715954, "event_type": "POINT_IN_TIME", "key": "train_samples", "value": 38400000, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1348}}
:::MLLOG {"namespace": "", "time_ms": 1778242715954, "event_type": "POINT_IN_TIME", "key": "opt_name", "value": "adamw", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1350}}
:::MLLOG {"namespace": "", "time_ms": 1778242715954, "event_type": "POINT_IN_TIME", "key": "opt_base_learning_rate", "value": 0.001, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1351}}
:::MLLOG {"namespace": "", "time_ms": 1778242715954, "event_type": "POINT_IN_TIME", "key": "opt_end_learning_rate", "value": 0.0001, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1352}}
:::MLLOG {"namespace": "", "time_ms": 1778242715954, "event_type": "POINT_IN_TIME", "key": "opt_adamw_beta_1", "value": 0.9, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1353}}
:::MLLOG {"namespace": "", "time_ms": 1778242715954, "event_type": "POINT_IN_TIME", "key": "opt_adamw_beta_2", "value": 0.95, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1354}}
:::MLLOG {"namespace": "", "time_ms": 1778242715954, "event_type": "POINT_IN_TIME", "key": "opt_adamw_epsilon", "value": 1e-05, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1355}}
:::MLLOG {"namespace": "", "time_ms": 1778242715954, "event_type": "POINT_IN_TIME", "key": "opt_adamw_weight_decay", "value": 0.1, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1356}}
:::MLLOG {"namespace": "", "time_ms": 1778242715954, "event_type": "POINT_IN_TIME", "key": "opt_learning_rate_warmup_steps", "value": 128, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1357}}
:::MLLOG {"namespace": "", "time_ms": 1778242715955, "event_type": "POINT_IN_TIME", "key": "num_warmup_steps", "value": 128, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1358}}
:::MLLOG {"namespace": "", "time_ms": 1778242715955, "event_type": "POINT_IN_TIME", "key": "opt_learning_rate_decay_steps", "value": 1199872, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1359}}
:::MLLOG {"namespace": "", "time_ms": 1778242715955, "event_type": "POINT_IN_TIME", "key": "opt_learning_rate_decay_schedule", "value": "cosine with linear warmup", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1360}}
:::MLLOG {"namespace": "", "time_ms": 1778242715955, "event_type": "POINT_IN_TIME", "key": "opt_gradient_clip_norm", "value": 1.0, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1361}}
:::MLLOG {"namespace": "", "time_ms": 1778243033805, "event_type": "INTERVAL_START", "key": "epoch_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1529, "samples_count": 0}}
:::MLLOG {"namespace": "", "time_ms": 1778243033806, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1530, "samples_count": 0}}
:::MLLOG {"namespace": "", "time_ms": 1778243851371, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778243851372, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778243896651, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 5.7802734375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778243896652, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778243896652, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778244555628, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778244555629, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778244585531, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 4.574951171875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778244585532, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778244585533, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778245246511, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778245246512, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778245276502, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 4.1171875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778245276503, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778245276503, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778245937187, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778245937187, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778245967058, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.8995361328125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778245967059, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778245967059, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778246626117, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778246626117, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778246656019, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.762451171875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778246656019, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778246656020, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778247315255, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778247315256, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778247345128, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.6572265625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778247345128, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778247345129, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778248003582, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778248003582, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778248033442, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.58740234375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778248033443, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778248033443, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778248692764, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778248692764, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778248722726, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.5286865234375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778248722727, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778248722727, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778249383186, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778249383186, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778249413099, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.475830078125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778249413099, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778249413100, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778250072852, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778250072852, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778250102740, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.4278564453125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778250102741, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778250102741, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778250762230, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778250762230, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778250792198, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.400146484375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778250792199, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778250792199, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778251455492, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778251455492, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778251485544, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.3818359375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778251485545, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778251485545, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778252146772, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778252146772, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778252176776, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.345458984375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778252176776, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778252176777, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778252836585, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778252836586, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778252866442, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.322265625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778252866443, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778252866443, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778253526422, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778253526422, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778253556343, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.299072265625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778253556343, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778253556344, "event_type": "INTERVAL_END", "key": "epoch_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1646, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778253556344, "event_type": "INTERVAL_END", "key": "run_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1647, "status": "success"}}
@@ -0,0 +1,111 @@
:::MLLOG {"namespace": "", "time_ms": 1778253570454, "event_type": "POINT_IN_TIME", "key": "submission_org", "value": "tinycorp", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1328}}
:::MLLOG {"namespace": "", "time_ms": 1778253570459, "event_type": "POINT_IN_TIME", "key": "submission_platform", "value": "tinybox", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1329}}
:::MLLOG {"namespace": "", "time_ms": 1778253570459, "event_type": "POINT_IN_TIME", "key": "submission_division", "value": "closed", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1330}}
:::MLLOG {"namespace": "", "time_ms": 1778253570459, "event_type": "POINT_IN_TIME", "key": "submission_status", "value": "onprem", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1331}}
:::MLLOG {"namespace": "", "time_ms": 1778253570459, "event_type": "POINT_IN_TIME", "key": "submission_benchmark", "value": "llama31_8b", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1333}}
:::MLLOG {"namespace": "", "time_ms": 1778253571045, "event_type": "POINT_IN_TIME", "key": "cache_clear", "value": true, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1336}}
:::MLLOG {"namespace": "", "time_ms": 1778253571045, "event_type": "INTERVAL_START", "key": "init_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1337}}
:::MLLOG {"namespace": "", "time_ms": 1778253944036, "event_type": "INTERVAL_END", "key": "init_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1629}}
:::MLLOG {"namespace": "", "time_ms": 1778253957691, "event_type": "INTERVAL_START", "key": "run_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1340}}
:::MLLOG {"namespace": "", "time_ms": 1778253957695, "event_type": "POINT_IN_TIME", "key": "seed", "value": 14711, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1341}}
:::MLLOG {"namespace": "", "time_ms": 1778253957695, "event_type": "POINT_IN_TIME", "key": "global_batch_size", "value": 32, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1343}}
:::MLLOG {"namespace": "", "time_ms": 1778253957695, "event_type": "POINT_IN_TIME", "key": "max_sequence_length", "value": 8192, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1344}}
:::MLLOG {"namespace": "", "time_ms": 1778253957695, "event_type": "POINT_IN_TIME", "key": "max_steps", "value": 1200000, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1345}}
:::MLLOG {"namespace": "", "time_ms": 1778253957695, "event_type": "POINT_IN_TIME", "key": "gradient_accumulation_steps", "value": 2, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1346}}
:::MLLOG {"namespace": "", "time_ms": 1778253957695, "event_type": "POINT_IN_TIME", "key": "eval_samples", "value": 1024, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1347}}
:::MLLOG {"namespace": "", "time_ms": 1778253957695, "event_type": "POINT_IN_TIME", "key": "train_samples", "value": 38400000, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1348}}
:::MLLOG {"namespace": "", "time_ms": 1778253957695, "event_type": "POINT_IN_TIME", "key": "opt_name", "value": "adamw", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1350}}
:::MLLOG {"namespace": "", "time_ms": 1778253957695, "event_type": "POINT_IN_TIME", "key": "opt_base_learning_rate", "value": 0.001, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1351}}
:::MLLOG {"namespace": "", "time_ms": 1778253957696, "event_type": "POINT_IN_TIME", "key": "opt_end_learning_rate", "value": 0.0001, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1352}}
:::MLLOG {"namespace": "", "time_ms": 1778253957696, "event_type": "POINT_IN_TIME", "key": "opt_adamw_beta_1", "value": 0.9, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1353}}
:::MLLOG {"namespace": "", "time_ms": 1778253957696, "event_type": "POINT_IN_TIME", "key": "opt_adamw_beta_2", "value": 0.95, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1354}}
:::MLLOG {"namespace": "", "time_ms": 1778253957696, "event_type": "POINT_IN_TIME", "key": "opt_adamw_epsilon", "value": 1e-05, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1355}}
:::MLLOG {"namespace": "", "time_ms": 1778253957696, "event_type": "POINT_IN_TIME", "key": "opt_adamw_weight_decay", "value": 0.1, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1356}}
:::MLLOG {"namespace": "", "time_ms": 1778253957696, "event_type": "POINT_IN_TIME", "key": "opt_learning_rate_warmup_steps", "value": 128, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1357}}
:::MLLOG {"namespace": "", "time_ms": 1778253957696, "event_type": "POINT_IN_TIME", "key": "num_warmup_steps", "value": 128, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1358}}
:::MLLOG {"namespace": "", "time_ms": 1778253957696, "event_type": "POINT_IN_TIME", "key": "opt_learning_rate_decay_steps", "value": 1199872, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1359}}
:::MLLOG {"namespace": "", "time_ms": 1778253957696, "event_type": "POINT_IN_TIME", "key": "opt_learning_rate_decay_schedule", "value": "cosine with linear warmup", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1360}}
:::MLLOG {"namespace": "", "time_ms": 1778253957696, "event_type": "POINT_IN_TIME", "key": "opt_gradient_clip_norm", "value": 1.0, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1361}}
:::MLLOG {"namespace": "", "time_ms": 1778254276545, "event_type": "INTERVAL_START", "key": "epoch_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1529, "samples_count": 0}}
:::MLLOG {"namespace": "", "time_ms": 1778254276546, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1530, "samples_count": 0}}
:::MLLOG {"namespace": "", "time_ms": 1778255100535, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778255100536, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778255143977, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 5.77978515625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778255143977, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778255143978, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778255806844, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778255806845, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778255836518, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 4.578857421875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778255836519, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778255836520, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778256495933, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778256495933, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778256525443, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 4.1239013671875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778256525443, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778256525444, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778257180826, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778257180827, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778257210282, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.906494140625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778257210283, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778257210283, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778257866434, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778257866435, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778257895945, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.75244140625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778257895945, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778257895946, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778258550818, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778258550819, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778258580369, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.6553955078125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778258580369, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778258580370, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778259234200, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778259234201, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778259263770, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.5762939453125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778259263771, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778259263772, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778259917494, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778259917495, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778259947011, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.52197265625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778259947012, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778259947013, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778260600453, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778260600454, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778260629950, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.4765625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778260629951, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778260629951, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778261285126, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778261285127, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778261314809, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.4378662109375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778261314810, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778261314810, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778261971632, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778261971632, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778262001260, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.3968505859375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778262001261, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778262001261, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778262657393, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778262657394, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778262686962, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.365966796875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778262686962, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778262686963, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778263342665, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778263342666, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778263372176, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.3365478515625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778263372176, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778263372177, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778264027427, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778264027428, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778264056993, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.3363037109375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778264056993, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778264056994, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778264710992, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778264710993, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778264740486, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.3016357421875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778264740486, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778264740487, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778265396989, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 196608}}
:::MLLOG {"namespace": "", "time_ms": 1778265396989, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 196608}}
:::MLLOG {"namespace": "", "time_ms": 1778265426521, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.2861328125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 196608}}
:::MLLOG {"namespace": "", "time_ms": 1778265426522, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 196608}}
:::MLLOG {"namespace": "", "time_ms": 1778265426522, "event_type": "INTERVAL_END", "key": "epoch_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1646, "samples_count": 196608}}
:::MLLOG {"namespace": "", "time_ms": 1778265426522, "event_type": "INTERVAL_END", "key": "run_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1647, "status": "success"}}
@@ -0,0 +1,111 @@
:::MLLOG {"namespace": "", "time_ms": 1778265440911, "event_type": "POINT_IN_TIME", "key": "submission_org", "value": "tinycorp", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1328}}
:::MLLOG {"namespace": "", "time_ms": 1778265440915, "event_type": "POINT_IN_TIME", "key": "submission_platform", "value": "tinybox", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1329}}
:::MLLOG {"namespace": "", "time_ms": 1778265440915, "event_type": "POINT_IN_TIME", "key": "submission_division", "value": "closed", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1330}}
:::MLLOG {"namespace": "", "time_ms": 1778265440916, "event_type": "POINT_IN_TIME", "key": "submission_status", "value": "onprem", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1331}}
:::MLLOG {"namespace": "", "time_ms": 1778265440916, "event_type": "POINT_IN_TIME", "key": "submission_benchmark", "value": "llama31_8b", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1333}}
:::MLLOG {"namespace": "", "time_ms": 1778265441493, "event_type": "POINT_IN_TIME", "key": "cache_clear", "value": true, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1336}}
:::MLLOG {"namespace": "", "time_ms": 1778265441493, "event_type": "INTERVAL_START", "key": "init_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1337}}
:::MLLOG {"namespace": "", "time_ms": 1778265779467, "event_type": "INTERVAL_END", "key": "init_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1629}}
:::MLLOG {"namespace": "", "time_ms": 1778265792765, "event_type": "INTERVAL_START", "key": "run_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1340}}
:::MLLOG {"namespace": "", "time_ms": 1778265792769, "event_type": "POINT_IN_TIME", "key": "seed", "value": 27754, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1341}}
:::MLLOG {"namespace": "", "time_ms": 1778265792769, "event_type": "POINT_IN_TIME", "key": "global_batch_size", "value": 32, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1343}}
:::MLLOG {"namespace": "", "time_ms": 1778265792769, "event_type": "POINT_IN_TIME", "key": "max_sequence_length", "value": 8192, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1344}}
:::MLLOG {"namespace": "", "time_ms": 1778265792769, "event_type": "POINT_IN_TIME", "key": "max_steps", "value": 1200000, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1345}}
:::MLLOG {"namespace": "", "time_ms": 1778265792769, "event_type": "POINT_IN_TIME", "key": "gradient_accumulation_steps", "value": 2, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1346}}
:::MLLOG {"namespace": "", "time_ms": 1778265792769, "event_type": "POINT_IN_TIME", "key": "eval_samples", "value": 1024, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1347}}
:::MLLOG {"namespace": "", "time_ms": 1778265792769, "event_type": "POINT_IN_TIME", "key": "train_samples", "value": 38400000, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1348}}
:::MLLOG {"namespace": "", "time_ms": 1778265792769, "event_type": "POINT_IN_TIME", "key": "opt_name", "value": "adamw", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1350}}
:::MLLOG {"namespace": "", "time_ms": 1778265792770, "event_type": "POINT_IN_TIME", "key": "opt_base_learning_rate", "value": 0.001, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1351}}
:::MLLOG {"namespace": "", "time_ms": 1778265792770, "event_type": "POINT_IN_TIME", "key": "opt_end_learning_rate", "value": 0.0001, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1352}}
:::MLLOG {"namespace": "", "time_ms": 1778265792770, "event_type": "POINT_IN_TIME", "key": "opt_adamw_beta_1", "value": 0.9, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1353}}
:::MLLOG {"namespace": "", "time_ms": 1778265792770, "event_type": "POINT_IN_TIME", "key": "opt_adamw_beta_2", "value": 0.95, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1354}}
:::MLLOG {"namespace": "", "time_ms": 1778265792770, "event_type": "POINT_IN_TIME", "key": "opt_adamw_epsilon", "value": 1e-05, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1355}}
:::MLLOG {"namespace": "", "time_ms": 1778265792770, "event_type": "POINT_IN_TIME", "key": "opt_adamw_weight_decay", "value": 0.1, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1356}}
:::MLLOG {"namespace": "", "time_ms": 1778265792770, "event_type": "POINT_IN_TIME", "key": "opt_learning_rate_warmup_steps", "value": 128, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1357}}
:::MLLOG {"namespace": "", "time_ms": 1778265792770, "event_type": "POINT_IN_TIME", "key": "num_warmup_steps", "value": 128, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1358}}
:::MLLOG {"namespace": "", "time_ms": 1778265792770, "event_type": "POINT_IN_TIME", "key": "opt_learning_rate_decay_steps", "value": 1199872, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1359}}
:::MLLOG {"namespace": "", "time_ms": 1778265792770, "event_type": "POINT_IN_TIME", "key": "opt_learning_rate_decay_schedule", "value": "cosine with linear warmup", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1360}}
:::MLLOG {"namespace": "", "time_ms": 1778265792770, "event_type": "POINT_IN_TIME", "key": "opt_gradient_clip_norm", "value": 1.0, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1361}}
:::MLLOG {"namespace": "", "time_ms": 1778266108942, "event_type": "INTERVAL_START", "key": "epoch_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1529, "samples_count": 0}}
:::MLLOG {"namespace": "", "time_ms": 1778266108943, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1530, "samples_count": 0}}
:::MLLOG {"namespace": "", "time_ms": 1778266913943, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778266913944, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778266957471, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 5.74072265625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778266957472, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778266957472, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778267616663, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778267616663, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778267648052, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 4.612060546875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778267648053, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778267648053, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778268306168, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778268306168, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778268335863, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 4.16552734375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778268335864, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778268335864, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778268998030, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778268998030, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778269027991, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.915283203125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778269027992, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778269027992, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778269689514, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778269689515, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778269719312, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.7637939453125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778269719313, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778269719313, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778270378319, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778270378320, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778270408037, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.6695556640625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778270408038, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778270408038, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778271066429, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778271066430, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778271096134, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.583251953125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778271096135, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778271096135, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778271754376, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778271754377, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778271784142, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.525146484375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778271784142, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778271784143, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778272442458, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778272442459, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778272472257, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.4774169921875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778272472257, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778272472258, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778273129575, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778273129576, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778273159231, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.443359375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778273159231, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778273159232, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778273816098, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778273816099, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778273845769, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.4072265625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778273845770, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778273845770, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778274505683, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778274505684, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778274535540, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.3677978515625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778274535541, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778274535541, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778275195662, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778275195662, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778275225396, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.4146728515625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778275225397, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778275225397, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778275884245, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778275884246, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778275913924, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.3697509765625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778275913925, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778275913925, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778276570930, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778276570931, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778276600619, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.321533203125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778276600620, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778276600620, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778277262406, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 196608}}
:::MLLOG {"namespace": "", "time_ms": 1778277262407, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 196608}}
:::MLLOG {"namespace": "", "time_ms": 1778277292466, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.287353515625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 196608}}
:::MLLOG {"namespace": "", "time_ms": 1778277292467, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 196608}}
:::MLLOG {"namespace": "", "time_ms": 1778277292467, "event_type": "INTERVAL_END", "key": "epoch_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1646, "samples_count": 196608}}
:::MLLOG {"namespace": "", "time_ms": 1778277292468, "event_type": "INTERVAL_END", "key": "run_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1647, "status": "success"}}
@@ -0,0 +1,111 @@
:::MLLOG {"namespace": "", "time_ms": 1778277306868, "event_type": "POINT_IN_TIME", "key": "submission_org", "value": "tinycorp", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1328}}
:::MLLOG {"namespace": "", "time_ms": 1778277306872, "event_type": "POINT_IN_TIME", "key": "submission_platform", "value": "tinybox", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1329}}
:::MLLOG {"namespace": "", "time_ms": 1778277306872, "event_type": "POINT_IN_TIME", "key": "submission_division", "value": "closed", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1330}}
:::MLLOG {"namespace": "", "time_ms": 1778277306873, "event_type": "POINT_IN_TIME", "key": "submission_status", "value": "onprem", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1331}}
:::MLLOG {"namespace": "", "time_ms": 1778277306873, "event_type": "POINT_IN_TIME", "key": "submission_benchmark", "value": "llama31_8b", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1333}}
:::MLLOG {"namespace": "", "time_ms": 1778277307428, "event_type": "POINT_IN_TIME", "key": "cache_clear", "value": true, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1336}}
:::MLLOG {"namespace": "", "time_ms": 1778277307429, "event_type": "INTERVAL_START", "key": "init_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1337}}
:::MLLOG {"namespace": "", "time_ms": 1778277671564, "event_type": "INTERVAL_END", "key": "init_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1629}}
:::MLLOG {"namespace": "", "time_ms": 1778277685153, "event_type": "INTERVAL_START", "key": "run_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1340}}
:::MLLOG {"namespace": "", "time_ms": 1778277685157, "event_type": "POINT_IN_TIME", "key": "seed", "value": 17816, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1341}}
:::MLLOG {"namespace": "", "time_ms": 1778277685157, "event_type": "POINT_IN_TIME", "key": "global_batch_size", "value": 32, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1343}}
:::MLLOG {"namespace": "", "time_ms": 1778277685157, "event_type": "POINT_IN_TIME", "key": "max_sequence_length", "value": 8192, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1344}}
:::MLLOG {"namespace": "", "time_ms": 1778277685158, "event_type": "POINT_IN_TIME", "key": "max_steps", "value": 1200000, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1345}}
:::MLLOG {"namespace": "", "time_ms": 1778277685158, "event_type": "POINT_IN_TIME", "key": "gradient_accumulation_steps", "value": 2, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1346}}
:::MLLOG {"namespace": "", "time_ms": 1778277685158, "event_type": "POINT_IN_TIME", "key": "eval_samples", "value": 1024, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1347}}
:::MLLOG {"namespace": "", "time_ms": 1778277685158, "event_type": "POINT_IN_TIME", "key": "train_samples", "value": 38400000, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1348}}
:::MLLOG {"namespace": "", "time_ms": 1778277685158, "event_type": "POINT_IN_TIME", "key": "opt_name", "value": "adamw", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1350}}
:::MLLOG {"namespace": "", "time_ms": 1778277685158, "event_type": "POINT_IN_TIME", "key": "opt_base_learning_rate", "value": 0.001, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1351}}
:::MLLOG {"namespace": "", "time_ms": 1778277685158, "event_type": "POINT_IN_TIME", "key": "opt_end_learning_rate", "value": 0.0001, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1352}}
:::MLLOG {"namespace": "", "time_ms": 1778277685158, "event_type": "POINT_IN_TIME", "key": "opt_adamw_beta_1", "value": 0.9, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1353}}
:::MLLOG {"namespace": "", "time_ms": 1778277685158, "event_type": "POINT_IN_TIME", "key": "opt_adamw_beta_2", "value": 0.95, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1354}}
:::MLLOG {"namespace": "", "time_ms": 1778277685158, "event_type": "POINT_IN_TIME", "key": "opt_adamw_epsilon", "value": 1e-05, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1355}}
:::MLLOG {"namespace": "", "time_ms": 1778277685158, "event_type": "POINT_IN_TIME", "key": "opt_adamw_weight_decay", "value": 0.1, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1356}}
:::MLLOG {"namespace": "", "time_ms": 1778277685158, "event_type": "POINT_IN_TIME", "key": "opt_learning_rate_warmup_steps", "value": 128, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1357}}
:::MLLOG {"namespace": "", "time_ms": 1778277685158, "event_type": "POINT_IN_TIME", "key": "num_warmup_steps", "value": 128, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1358}}
:::MLLOG {"namespace": "", "time_ms": 1778277685159, "event_type": "POINT_IN_TIME", "key": "opt_learning_rate_decay_steps", "value": 1199872, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1359}}
:::MLLOG {"namespace": "", "time_ms": 1778277685159, "event_type": "POINT_IN_TIME", "key": "opt_learning_rate_decay_schedule", "value": "cosine with linear warmup", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1360}}
:::MLLOG {"namespace": "", "time_ms": 1778277685159, "event_type": "POINT_IN_TIME", "key": "opt_gradient_clip_norm", "value": 1.0, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1361}}
:::MLLOG {"namespace": "", "time_ms": 1778278007248, "event_type": "INTERVAL_START", "key": "epoch_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1529, "samples_count": 0}}
:::MLLOG {"namespace": "", "time_ms": 1778278007260, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1530, "samples_count": 0}}
:::MLLOG {"namespace": "", "time_ms": 1778278810368, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778278810369, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778278855284, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 5.768798828125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778278855285, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778278855285, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778279519460, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778279519461, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778279549391, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 4.568603515625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778279549392, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778279549392, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778280214562, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778280214563, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778280244495, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 4.151123046875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778280244496, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778280244496, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778280909906, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778280909906, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778280939913, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.9197998046875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778280939913, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778280939914, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778281607749, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778281607750, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778281637814, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.7734375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778281637815, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778281637815, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778282306223, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778282306224, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778282336322, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.673583984375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778282336323, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778282336323, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778283007699, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778283007700, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778283037808, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.6011962890625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778283037808, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778283037809, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778283706598, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778283706598, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778283736748, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.526123046875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778283736748, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778283736749, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778284408590, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778284408590, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778284438316, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.475341796875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778284438317, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778284438317, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778285098897, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778285098898, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778285128703, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.432861328125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778285128703, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778285128704, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778285786660, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778285786660, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778285816222, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.4031982421875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778285816222, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778285816223, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778286473781, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778286473782, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778286503417, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.3638916015625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778286503418, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778286503418, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778287160556, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778287160556, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778287190213, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.341796875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778287190214, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778287190215, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778287846424, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778287846424, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778287876044, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.32177734375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778287876045, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778287876046, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778288531947, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778288531947, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778288561549, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.5465087890625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778288561550, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778288561550, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778289220442, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 196608}}
:::MLLOG {"namespace": "", "time_ms": 1778289220442, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 196608}}
:::MLLOG {"namespace": "", "time_ms": 1778289250127, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.2855224609375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 196608}}
:::MLLOG {"namespace": "", "time_ms": 1778289250128, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 196608}}
:::MLLOG {"namespace": "", "time_ms": 1778289250128, "event_type": "INTERVAL_END", "key": "epoch_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1646, "samples_count": 196608}}
:::MLLOG {"namespace": "", "time_ms": 1778289250129, "event_type": "INTERVAL_END", "key": "run_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1647, "status": "success"}}
@@ -0,0 +1,106 @@
:::MLLOG {"namespace": "", "time_ms": 1778289264340, "event_type": "POINT_IN_TIME", "key": "submission_org", "value": "tinycorp", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1328}}
:::MLLOG {"namespace": "", "time_ms": 1778289264344, "event_type": "POINT_IN_TIME", "key": "submission_platform", "value": "tinybox", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1329}}
:::MLLOG {"namespace": "", "time_ms": 1778289264344, "event_type": "POINT_IN_TIME", "key": "submission_division", "value": "closed", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1330}}
:::MLLOG {"namespace": "", "time_ms": 1778289264344, "event_type": "POINT_IN_TIME", "key": "submission_status", "value": "onprem", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1331}}
:::MLLOG {"namespace": "", "time_ms": 1778289264344, "event_type": "POINT_IN_TIME", "key": "submission_benchmark", "value": "llama31_8b", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1333}}
:::MLLOG {"namespace": "", "time_ms": 1778289264911, "event_type": "POINT_IN_TIME", "key": "cache_clear", "value": true, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1336}}
:::MLLOG {"namespace": "", "time_ms": 1778289264912, "event_type": "INTERVAL_START", "key": "init_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1337}}
:::MLLOG {"namespace": "", "time_ms": 1778289599730, "event_type": "INTERVAL_END", "key": "init_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1629}}
:::MLLOG {"namespace": "", "time_ms": 1778289613197, "event_type": "INTERVAL_START", "key": "run_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1340}}
:::MLLOG {"namespace": "", "time_ms": 1778289613200, "event_type": "POINT_IN_TIME", "key": "seed", "value": 16781, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1341}}
:::MLLOG {"namespace": "", "time_ms": 1778289613201, "event_type": "POINT_IN_TIME", "key": "global_batch_size", "value": 32, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1343}}
:::MLLOG {"namespace": "", "time_ms": 1778289613201, "event_type": "POINT_IN_TIME", "key": "max_sequence_length", "value": 8192, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1344}}
:::MLLOG {"namespace": "", "time_ms": 1778289613201, "event_type": "POINT_IN_TIME", "key": "max_steps", "value": 1200000, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1345}}
:::MLLOG {"namespace": "", "time_ms": 1778289613201, "event_type": "POINT_IN_TIME", "key": "gradient_accumulation_steps", "value": 2, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1346}}
:::MLLOG {"namespace": "", "time_ms": 1778289613201, "event_type": "POINT_IN_TIME", "key": "eval_samples", "value": 1024, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1347}}
:::MLLOG {"namespace": "", "time_ms": 1778289613201, "event_type": "POINT_IN_TIME", "key": "train_samples", "value": 38400000, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1348}}
:::MLLOG {"namespace": "", "time_ms": 1778289613201, "event_type": "POINT_IN_TIME", "key": "opt_name", "value": "adamw", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1350}}
:::MLLOG {"namespace": "", "time_ms": 1778289613201, "event_type": "POINT_IN_TIME", "key": "opt_base_learning_rate", "value": 0.001, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1351}}
:::MLLOG {"namespace": "", "time_ms": 1778289613201, "event_type": "POINT_IN_TIME", "key": "opt_end_learning_rate", "value": 0.0001, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1352}}
:::MLLOG {"namespace": "", "time_ms": 1778289613201, "event_type": "POINT_IN_TIME", "key": "opt_adamw_beta_1", "value": 0.9, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1353}}
:::MLLOG {"namespace": "", "time_ms": 1778289613201, "event_type": "POINT_IN_TIME", "key": "opt_adamw_beta_2", "value": 0.95, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1354}}
:::MLLOG {"namespace": "", "time_ms": 1778289613201, "event_type": "POINT_IN_TIME", "key": "opt_adamw_epsilon", "value": 1e-05, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1355}}
:::MLLOG {"namespace": "", "time_ms": 1778289613202, "event_type": "POINT_IN_TIME", "key": "opt_adamw_weight_decay", "value": 0.1, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1356}}
:::MLLOG {"namespace": "", "time_ms": 1778289613202, "event_type": "POINT_IN_TIME", "key": "opt_learning_rate_warmup_steps", "value": 128, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1357}}
:::MLLOG {"namespace": "", "time_ms": 1778289613202, "event_type": "POINT_IN_TIME", "key": "num_warmup_steps", "value": 128, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1358}}
:::MLLOG {"namespace": "", "time_ms": 1778289613202, "event_type": "POINT_IN_TIME", "key": "opt_learning_rate_decay_steps", "value": 1199872, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1359}}
:::MLLOG {"namespace": "", "time_ms": 1778289613202, "event_type": "POINT_IN_TIME", "key": "opt_learning_rate_decay_schedule", "value": "cosine with linear warmup", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1360}}
:::MLLOG {"namespace": "", "time_ms": 1778289613202, "event_type": "POINT_IN_TIME", "key": "opt_gradient_clip_norm", "value": 1.0, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1361}}
:::MLLOG {"namespace": "", "time_ms": 1778289929875, "event_type": "INTERVAL_START", "key": "epoch_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1529, "samples_count": 0}}
:::MLLOG {"namespace": "", "time_ms": 1778289929878, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1530, "samples_count": 0}}
:::MLLOG {"namespace": "", "time_ms": 1778290756967, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778290756968, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778290801735, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 5.758544921875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778290801736, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778290801736, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778291460896, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778291460896, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778291490685, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 4.683349609375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778291490685, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778291490686, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778292152773, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778292152774, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778292182518, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 4.1280517578125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778292182519, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778292182519, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778292842100, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778292842101, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778292871768, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.90185546875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778292871769, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778292871769, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778293529314, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778293529315, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778293559042, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.757080078125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778293559043, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778293559043, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778294218188, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778294218189, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778294247880, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.6575927734375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778294247880, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778294247881, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778294908017, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778294908018, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778294937688, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.586181640625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778294937689, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778294937690, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778295595710, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778295595710, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778295625392, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.5230712890625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778295625393, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778295625394, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778296283795, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778296283795, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778296313518, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.467529296875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778296313519, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778296313519, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778296973892, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778296973893, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778297003579, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.4351806640625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778297003580, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778297003580, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778297661577, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778297661578, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778297691130, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.406982421875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778297691130, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778297691131, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778298348217, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778298348218, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778298377837, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.3848876953125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778298377837, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778298377838, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778299035939, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778299035940, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778299065575, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.3480224609375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778299065576, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778299065576, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778299724382, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778299724383, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778299754023, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.3209228515625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778299754023, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778299754024, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778300412415, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778300412415, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778300442058, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.2950439453125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778300442059, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778300442060, "event_type": "INTERVAL_END", "key": "epoch_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1646, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778300442060, "event_type": "INTERVAL_END", "key": "run_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1647, "status": "success"}}
@@ -0,0 +1,111 @@
:::MLLOG {"namespace": "", "time_ms": 1778300456451, "event_type": "POINT_IN_TIME", "key": "submission_org", "value": "tinycorp", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1328}}
:::MLLOG {"namespace": "", "time_ms": 1778300456455, "event_type": "POINT_IN_TIME", "key": "submission_platform", "value": "tinybox", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1329}}
:::MLLOG {"namespace": "", "time_ms": 1778300456455, "event_type": "POINT_IN_TIME", "key": "submission_division", "value": "closed", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1330}}
:::MLLOG {"namespace": "", "time_ms": 1778300456455, "event_type": "POINT_IN_TIME", "key": "submission_status", "value": "onprem", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1331}}
:::MLLOG {"namespace": "", "time_ms": 1778300456455, "event_type": "POINT_IN_TIME", "key": "submission_benchmark", "value": "llama31_8b", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1333}}
:::MLLOG {"namespace": "", "time_ms": 1778300457011, "event_type": "POINT_IN_TIME", "key": "cache_clear", "value": true, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1336}}
:::MLLOG {"namespace": "", "time_ms": 1778300457012, "event_type": "INTERVAL_START", "key": "init_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1337}}
:::MLLOG {"namespace": "", "time_ms": 1778300803665, "event_type": "INTERVAL_END", "key": "init_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1629}}
:::MLLOG {"namespace": "", "time_ms": 1778300817390, "event_type": "INTERVAL_START", "key": "run_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1340}}
:::MLLOG {"namespace": "", "time_ms": 1778300817395, "event_type": "POINT_IN_TIME", "key": "seed", "value": 4729, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1341}}
:::MLLOG {"namespace": "", "time_ms": 1778300817395, "event_type": "POINT_IN_TIME", "key": "global_batch_size", "value": 32, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1343}}
:::MLLOG {"namespace": "", "time_ms": 1778300817395, "event_type": "POINT_IN_TIME", "key": "max_sequence_length", "value": 8192, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1344}}
:::MLLOG {"namespace": "", "time_ms": 1778300817395, "event_type": "POINT_IN_TIME", "key": "max_steps", "value": 1200000, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1345}}
:::MLLOG {"namespace": "", "time_ms": 1778300817395, "event_type": "POINT_IN_TIME", "key": "gradient_accumulation_steps", "value": 2, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1346}}
:::MLLOG {"namespace": "", "time_ms": 1778300817395, "event_type": "POINT_IN_TIME", "key": "eval_samples", "value": 1024, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1347}}
:::MLLOG {"namespace": "", "time_ms": 1778300817395, "event_type": "POINT_IN_TIME", "key": "train_samples", "value": 38400000, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1348}}
:::MLLOG {"namespace": "", "time_ms": 1778300817395, "event_type": "POINT_IN_TIME", "key": "opt_name", "value": "adamw", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1350}}
:::MLLOG {"namespace": "", "time_ms": 1778300817395, "event_type": "POINT_IN_TIME", "key": "opt_base_learning_rate", "value": 0.001, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1351}}
:::MLLOG {"namespace": "", "time_ms": 1778300817395, "event_type": "POINT_IN_TIME", "key": "opt_end_learning_rate", "value": 0.0001, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1352}}
:::MLLOG {"namespace": "", "time_ms": 1778300817396, "event_type": "POINT_IN_TIME", "key": "opt_adamw_beta_1", "value": 0.9, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1353}}
:::MLLOG {"namespace": "", "time_ms": 1778300817396, "event_type": "POINT_IN_TIME", "key": "opt_adamw_beta_2", "value": 0.95, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1354}}
:::MLLOG {"namespace": "", "time_ms": 1778300817396, "event_type": "POINT_IN_TIME", "key": "opt_adamw_epsilon", "value": 1e-05, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1355}}
:::MLLOG {"namespace": "", "time_ms": 1778300817396, "event_type": "POINT_IN_TIME", "key": "opt_adamw_weight_decay", "value": 0.1, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1356}}
:::MLLOG {"namespace": "", "time_ms": 1778300817396, "event_type": "POINT_IN_TIME", "key": "opt_learning_rate_warmup_steps", "value": 128, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1357}}
:::MLLOG {"namespace": "", "time_ms": 1778300817396, "event_type": "POINT_IN_TIME", "key": "num_warmup_steps", "value": 128, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1358}}
:::MLLOG {"namespace": "", "time_ms": 1778300817396, "event_type": "POINT_IN_TIME", "key": "opt_learning_rate_decay_steps", "value": 1199872, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1359}}
:::MLLOG {"namespace": "", "time_ms": 1778300817396, "event_type": "POINT_IN_TIME", "key": "opt_learning_rate_decay_schedule", "value": "cosine with linear warmup", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1360}}
:::MLLOG {"namespace": "", "time_ms": 1778300817396, "event_type": "POINT_IN_TIME", "key": "opt_gradient_clip_norm", "value": 1.0, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1361}}
:::MLLOG {"namespace": "", "time_ms": 1778301145773, "event_type": "INTERVAL_START", "key": "epoch_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1529, "samples_count": 0}}
:::MLLOG {"namespace": "", "time_ms": 1778301145774, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1530, "samples_count": 0}}
:::MLLOG {"namespace": "", "time_ms": 1778301985088, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778301985089, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778302030319, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 5.865966796875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778302030319, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778302030320, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778302687526, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778302687527, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778302717259, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 4.615966796875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778302717260, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778302717261, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778303376036, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778303376037, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778303406044, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 4.154296875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778303406045, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778303406045, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778304071224, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778304071225, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778304101168, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.9095458984375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778304101169, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778304101170, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778304762172, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778304762173, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778304792161, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.775634765625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778304792162, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778304792162, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778305452836, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778305452836, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778305482708, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.676513671875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778305482708, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778305482709, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778306140246, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778306140246, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778306169947, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.5947265625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778306169947, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778306169948, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778306828284, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778306828285, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778306858077, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.5255126953125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778306858077, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778306858078, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778307519609, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778307519610, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778307549531, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.4757080078125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778307549532, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778307549532, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778308208151, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778308208152, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778308237856, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.4312744140625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778308237857, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778308237857, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778308896397, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778308896398, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778308926271, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.402099609375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778308926271, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778308926272, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778309586346, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778309586347, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778309616134, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.37060546875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778309616134, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778309616135, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778310273337, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778310273338, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778310303090, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.3968505859375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778310303091, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778310303092, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778310958883, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778310958883, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778310988541, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.3284912109375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778310988542, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778310988542, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778311645004, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778311645004, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778311674742, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.302001953125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778311674743, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778311674744, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778312331845, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 196608}}
:::MLLOG {"namespace": "", "time_ms": 1778312331846, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 196608}}
:::MLLOG {"namespace": "", "time_ms": 1778312361570, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.2777099609375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 196608}}
:::MLLOG {"namespace": "", "time_ms": 1778312361571, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 196608}}
:::MLLOG {"namespace": "", "time_ms": 1778312361571, "event_type": "INTERVAL_END", "key": "epoch_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1646, "samples_count": 196608}}
:::MLLOG {"namespace": "", "time_ms": 1778312361572, "event_type": "INTERVAL_END", "key": "run_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1647, "status": "success"}}
@@ -0,0 +1,106 @@
:::MLLOG {"namespace": "", "time_ms": 1778312377935, "event_type": "POINT_IN_TIME", "key": "submission_org", "value": "tinycorp", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1328}}
:::MLLOG {"namespace": "", "time_ms": 1778312377940, "event_type": "POINT_IN_TIME", "key": "submission_platform", "value": "tinybox", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1329}}
:::MLLOG {"namespace": "", "time_ms": 1778312377940, "event_type": "POINT_IN_TIME", "key": "submission_division", "value": "closed", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1330}}
:::MLLOG {"namespace": "", "time_ms": 1778312377940, "event_type": "POINT_IN_TIME", "key": "submission_status", "value": "onprem", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1331}}
:::MLLOG {"namespace": "", "time_ms": 1778312377940, "event_type": "POINT_IN_TIME", "key": "submission_benchmark", "value": "llama31_8b", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1333}}
:::MLLOG {"namespace": "", "time_ms": 1778312378485, "event_type": "POINT_IN_TIME", "key": "cache_clear", "value": true, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1336}}
:::MLLOG {"namespace": "", "time_ms": 1778312378485, "event_type": "INTERVAL_START", "key": "init_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1337}}
:::MLLOG {"namespace": "", "time_ms": 1778312726494, "event_type": "INTERVAL_END", "key": "init_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1629}}
:::MLLOG {"namespace": "", "time_ms": 1778312740045, "event_type": "INTERVAL_START", "key": "run_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1340}}
:::MLLOG {"namespace": "", "time_ms": 1778312740049, "event_type": "POINT_IN_TIME", "key": "seed", "value": 12228, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1341}}
:::MLLOG {"namespace": "", "time_ms": 1778312740049, "event_type": "POINT_IN_TIME", "key": "global_batch_size", "value": 32, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1343}}
:::MLLOG {"namespace": "", "time_ms": 1778312740049, "event_type": "POINT_IN_TIME", "key": "max_sequence_length", "value": 8192, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1344}}
:::MLLOG {"namespace": "", "time_ms": 1778312740050, "event_type": "POINT_IN_TIME", "key": "max_steps", "value": 1200000, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1345}}
:::MLLOG {"namespace": "", "time_ms": 1778312740050, "event_type": "POINT_IN_TIME", "key": "gradient_accumulation_steps", "value": 2, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1346}}
:::MLLOG {"namespace": "", "time_ms": 1778312740050, "event_type": "POINT_IN_TIME", "key": "eval_samples", "value": 1024, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1347}}
:::MLLOG {"namespace": "", "time_ms": 1778312740050, "event_type": "POINT_IN_TIME", "key": "train_samples", "value": 38400000, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1348}}
:::MLLOG {"namespace": "", "time_ms": 1778312740050, "event_type": "POINT_IN_TIME", "key": "opt_name", "value": "adamw", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1350}}
:::MLLOG {"namespace": "", "time_ms": 1778312740050, "event_type": "POINT_IN_TIME", "key": "opt_base_learning_rate", "value": 0.001, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1351}}
:::MLLOG {"namespace": "", "time_ms": 1778312740050, "event_type": "POINT_IN_TIME", "key": "opt_end_learning_rate", "value": 0.0001, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1352}}
:::MLLOG {"namespace": "", "time_ms": 1778312740050, "event_type": "POINT_IN_TIME", "key": "opt_adamw_beta_1", "value": 0.9, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1353}}
:::MLLOG {"namespace": "", "time_ms": 1778312740050, "event_type": "POINT_IN_TIME", "key": "opt_adamw_beta_2", "value": 0.95, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1354}}
:::MLLOG {"namespace": "", "time_ms": 1778312740050, "event_type": "POINT_IN_TIME", "key": "opt_adamw_epsilon", "value": 1e-05, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1355}}
:::MLLOG {"namespace": "", "time_ms": 1778312740050, "event_type": "POINT_IN_TIME", "key": "opt_adamw_weight_decay", "value": 0.1, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1356}}
:::MLLOG {"namespace": "", "time_ms": 1778312740050, "event_type": "POINT_IN_TIME", "key": "opt_learning_rate_warmup_steps", "value": 128, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1357}}
:::MLLOG {"namespace": "", "time_ms": 1778312740050, "event_type": "POINT_IN_TIME", "key": "num_warmup_steps", "value": 128, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1358}}
:::MLLOG {"namespace": "", "time_ms": 1778312740051, "event_type": "POINT_IN_TIME", "key": "opt_learning_rate_decay_steps", "value": 1199872, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1359}}
:::MLLOG {"namespace": "", "time_ms": 1778312740051, "event_type": "POINT_IN_TIME", "key": "opt_learning_rate_decay_schedule", "value": "cosine with linear warmup", "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1360}}
:::MLLOG {"namespace": "", "time_ms": 1778312740051, "event_type": "POINT_IN_TIME", "key": "opt_gradient_clip_norm", "value": 1.0, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1361}}
:::MLLOG {"namespace": "", "time_ms": 1778313057094, "event_type": "INTERVAL_START", "key": "epoch_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1529, "samples_count": 0}}
:::MLLOG {"namespace": "", "time_ms": 1778313057095, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1530, "samples_count": 0}}
:::MLLOG {"namespace": "", "time_ms": 1778313872567, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778313872567, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778313917470, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 5.736083984375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778313917471, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778313917472, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 12288}}
:::MLLOG {"namespace": "", "time_ms": 1778314572849, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778314572850, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778314602523, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 4.584716796875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778314602524, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778314602525, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 24576}}
:::MLLOG {"namespace": "", "time_ms": 1778315258897, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778315258898, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778315288494, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 4.114501953125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778315288495, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778315288496, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 36864}}
:::MLLOG {"namespace": "", "time_ms": 1778315946776, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778315946777, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778315976384, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.906005859375, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778315976385, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778315976386, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 49152}}
:::MLLOG {"namespace": "", "time_ms": 1778316632177, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778316632178, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778316661800, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.76513671875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778316661800, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778316661801, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 61440}}
:::MLLOG {"namespace": "", "time_ms": 1778317318705, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778317318706, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778317348421, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.6568603515625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778317348421, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778317348422, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 73728}}
:::MLLOG {"namespace": "", "time_ms": 1778318007246, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778318007246, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778318036837, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.5897216796875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778318036838, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778318036839, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 86016}}
:::MLLOG {"namespace": "", "time_ms": 1778318691769, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778318691770, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778318721376, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.52587890625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778318721377, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778318721377, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 98304}}
:::MLLOG {"namespace": "", "time_ms": 1778319374807, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778319374808, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778319404256, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.473388671875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778319404257, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778319404258, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 110592}}
:::MLLOG {"namespace": "", "time_ms": 1778320058613, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778320058613, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778320087986, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.4307861328125, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778320087987, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778320087988, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 122880}}
:::MLLOG {"namespace": "", "time_ms": 1778320742022, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778320742022, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778320771659, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.3931884765625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778320771660, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778320771660, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 135168}}
:::MLLOG {"namespace": "", "time_ms": 1778321426019, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778321426019, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778321455724, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.3629150390625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778321455725, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778321455726, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 147456}}
:::MLLOG {"namespace": "", "time_ms": 1778322114634, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778322114634, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778322144126, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.3377685546875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778322144127, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778322144127, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 159744}}
:::MLLOG {"namespace": "", "time_ms": 1778322801727, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778322801728, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778322831371, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.3150634765625, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778322831372, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778322831372, "event_type": "INTERVAL_START", "key": "block_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1654, "samples_count": 172032}}
:::MLLOG {"namespace": "", "time_ms": 1778323487126, "event_type": "INTERVAL_END", "key": "block_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1616, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778323487126, "event_type": "INTERVAL_START", "key": "eval_start", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1617, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778323516691, "event_type": "POINT_IN_TIME", "key": "eval_accuracy", "value": 3.2889404296875, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1637, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778323516691, "event_type": "INTERVAL_END", "key": "eval_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1638, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778323516692, "event_type": "INTERVAL_END", "key": "epoch_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1646, "samples_count": 184320}}
:::MLLOG {"namespace": "", "time_ms": 1778323516692, "event_type": "INTERVAL_END", "key": "run_stop", "value": null, "metadata": {"file": "tinygrad3/examples/mlperf/model_train.py", "lineno": 1647, "status": "success"}}
@@ -1,38 +0,0 @@
{
"submitter": "tinycorp",
"division": "closed",
"status": "Available on-premise",
"system_name": "tinybox 8xMI300X",
"number_of_nodes": "1",
"host_processors_per_node": "2",
"host_processor_model_name": "AMD EPYC 9354",
"host_processor_core_count": "32",
"host_processor_vcpu_count": "64",
"host_processor_frequency": "",
"host_processor_caches": "",
"host_processor_interconnect": "",
"host_memory_capacity": "2304GB",
"host_storage_type": "NVMe SSD",
"host_storage_capacity": "3x 4TB raid array",
"host_networking": "",
"host_networking_topology": "",
"host_memory_configuration": "24x 96GB DDR5",
"accelerators_per_node": "8",
"accelerator_model_name": "AMD Instinct MI300X 192GB HBM3",
"accelerator_host_interconnect": "PCIe 5.0 x16",
"accelerator_frequency": "",
"accelerator_on-chip_memories": "",
"accelerator_memory_configuration": "HBM3",
"accelerator_memory_capacity": "192GB",
"accelerator_interconnect": "",
"accelerator_interconnect_topology": "",
"cooling": "air",
"hw_notes": "",
"framework": "tinygrad, branch mlperf_training_v5.0",
"other_software_stack": {
"python": "3.10.16",
"ROCm": "3.0.0+94441cb"
},
"operating_system": "Ubuntu 24.04.1 LTS",
"sw_notes": ""
}
@@ -34,5 +34,5 @@
"ROCm": "7.1.1"
},
"operating_system": "Ubuntu 24.04.3 LTS",
"sw_notes": ""
"sw_notes": "tinygrad @ 026688f03f84a75ec3fef034bcba916bf8f8bdc6"
}
@@ -1,38 +0,0 @@
{
"submitter": "tinycorp",
"division": "closed",
"status": "Available on-premise",
"system_name": "tinybox green",
"number_of_nodes": "1",
"host_processors_per_node": "1",
"host_processor_model_name": "AMD EPYC 7532",
"host_processor_core_count": "32",
"host_processor_vcpu_count": "64",
"host_processor_frequency": "",
"host_processor_caches": "",
"host_processor_interconnect": "",
"host_memory_capacity": "128GB",
"host_storage_type": "NVMe SSD",
"host_storage_capacity": "4 TB raid array + 1 TB boot",
"host_networking": "",
"host_networking_topology": "",
"host_memory_configuration": "8x 16GB DDR4",
"accelerators_per_node": "6",
"accelerator_model_name": "NVIDIA GeForce RTX 4090",
"accelerator_host_interconnect": "PCIe 4.0 x16",
"accelerator_frequency": "",
"accelerator_on-chip_memories": "",
"accelerator_memory_configuration": "GDDR6X",
"accelerator_memory_capacity": "24GB",
"accelerator_interconnect": "",
"accelerator_interconnect_topology": "",
"cooling": "air",
"hw_notes": "",
"framework": "tinygrad, branch mlperf_training_v5.0",
"other_software_stack": {
"python": "3.10.12",
"CUDA": "12.4"
},
"operating_system": "Ubuntu 22.04.4",
"sw_notes": ""
}

Some files were not shown because too many files have changed in this diff Show More