← back to Exo
new_conf
732ba915aaf82dac96362f1bf5fdcc15ee87e39b · 2024-12-08 18:32:06 +0000 · Glen
Files touched
M .github/bench.pyR070 .github/workflows/build_and_test.yml .github/workflows/bench_job.ymlA .github/workflows/benchmarks.yml
Diff
commit 732ba915aaf82dac96362f1bf5fdcc15ee87e39b
Author: Glen <glen@Delias-MacBook-Air-2.local>
Date: Sun Dec 8 18:32:06 2024 +0000
new_conf
---
.github/bench.py | 6 +--
.../{build_and_test.yml => bench_job.yml} | 55 ++++++++++++----------
.github/workflows/benchmarks.yml | 16 +++++++
3 files changed, 49 insertions(+), 28 deletions(-)
diff --git a/.github/bench.py b/.github/bench.py
index 0dac0253..e06ecdff 100644
--- a/.github/bench.py
+++ b/.github/bench.py
@@ -21,9 +21,7 @@ async def measure_performance(api_endpoint: str, prompt: str) -> Dict[str, Any]:
"""
model = os.environ.get('model')
results: Dict[str, Any] = {'model': model, 'run_id': os.environ.get('GITHUB_RUN_ID')}
- results['configuration'] = {
- 'M4': 2 # TODO get this through env vars from the matrix def
- }
+ results['configuration'] = json.loads(os.environ.get('HARDWARE_CONFIG'))
# Get prompt length in tokens
async with aiohttp.ClientSession() as session:
@@ -37,7 +35,7 @@ async def measure_performance(api_endpoint: str, prompt: str) -> Dict[str, Any]:
json=request_payload
) as response:
token_data = await response.json()
- prompt_tokens = token_data.get('length', 0)
+ prompt_tokens = token_data.get('num_tokens', 0)
print(f"Prompt length: {prompt_tokens} tokens", flush=True)
except Exception as e:
print(f"Failed to get prompt length: {e}", flush=True)
diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/bench_job.yml
similarity index 70%
rename from .github/workflows/build_and_test.yml
rename to .github/workflows/bench_job.yml
index c733731b..8cb4bd7a 100644
--- a/.github/workflows/build_and_test.yml
+++ b/.github/workflows/bench_job.yml
@@ -1,26 +1,38 @@
-name: Build and Test
+# This is the reusable workflow file
+name: Distributed Job Runner
on:
- push:
- branches: [ '*' ]
- tags: [ '*' ]
- pull_request:
- branches: [ '*' ]
-
-env:
- PYTHON_VERSION: "3.12"
- TOKENIZERS_PARALLELISM: "false"
- PYTHONPATH: "."
-
+ workflow_call:
+ inputs:
+ config:
+ required: true
+ type: string
+ model:
+ required: true
+ type: string
jobs:
- check_local_runner:
+ generate-matrix:
+ runs-on: ubuntu-latest
+ outputs:
+ matrix: ${{ steps.set-matrix.outputs.matrix }}
+ steps:
+ - id: set-matrix
+ env:
+ CONFIG: ${{ inputs.config }}
+ run: |
+ MATRIX=$(echo $CONFIG | jq -c '{cpu: [to_entries | .[] | .key as $k | range(.value) | $k]}')
+ echo "matrix=$MATRIX" >> $GITHUB_OUTPUT
+
+ run-distributed-job:
+ needs: generate-matrix
strategy:
- matrix:
- cpu: ['M4', 'M4']
+ matrix: ${{fromJson(needs.generate-matrix.outputs.matrix)}}
runs-on: ['self-hosted', 'macOS', '${{ matrix.cpu }}']
+ env:
+ HARDWARE_CONFIG: ${{ inputs.config }}
+ model: ${{ inputs.model }}
steps:
- uses: actions/checkout@v4
-
- name: Install dependencies
run: |
# First, find where python3.12 is installed
@@ -37,18 +49,16 @@ jobs:
pip install --upgrade pip
pip install .
pip install boto3==1.35.76
-
- name: Run exo
env:
aws_access_key_id: ${{ secrets.S3_EXO_BENCHMARKS_AWS_ACCESS_KEY_ID }}
aws_secret_key: ${{ secrets.S3_EXO_BENCHMARKS_AWS_SECRET_ACCESS_KEY }}
- model: llama-3.2-1b
run: |
- ALL_NODE_IDS=$(for i in $(seq ${{ strategy.job-total }} -1 0); do echo -n "${GITHUB_JOB}_${i},"; done | sed 's/,$//')
- MY_NODE_ID="${GITHUB_JOB}_${{ strategy.job-index }}"
+ UNIQUE_JOB_ID="${GITHUB_JOB}_${GITHUB_RUN_ID}"
+ ALL_NODE_IDS=$(for i in $(seq ${{ strategy.job-total }} -1 0); do echo -n "${UNIQUE_JOB_ID}_${i},"; done | sed 's/,$//')
+ MY_NODE_ID="${UNIQUE_JOB_ID}_${{ strategy.job-index }}"
source env/bin/activate
export PATH="/usr/local/bin:/opt/homebrew/bin:$PATH"
- echo "${ALL_NODE_IDS}"
exo --node-id="${MY_NODE_ID}" --node-id-filter="${ALL_NODE_IDS}" --chatgpt-api-port 52415 --disable-tui > output1.log 2>&1 &
PID1=$!
tail -f output1.log &
@@ -83,6 +93,3 @@ jobs:
sleep 5
done
fi
- - name: Test
- run: |
- echo "GITHUB_JOB: ${GITHUB_JOB}, GITHUB_RUN_ID: ${GITHUB_RUN_ID}, GITHUB_RUN_NUMBER: ${GITHUB_RUN_NUMBER}, GITHUB_WORKFLOW: ${GITHUB_WORKFLOW}"
\ No newline at end of file
diff --git a/.github/workflows/benchmarks.yml b/.github/workflows/benchmarks.yml
new file mode 100644
index 00000000..c5146b20
--- /dev/null
+++ b/.github/workflows/benchmarks.yml
@@ -0,0 +1,16 @@
+name: Build and Test
+
+on:
+ push:
+ branches: [ '*' ]
+ tags: [ '*' ]
+ pull_request:
+ branches: [ '*' ]
+
+jobs:
+ test-m4-cluster:
+ uses: ./.github/workflows/distributed_job.yml
+ with:
+ config: '{"M4PRO_GPU16_24GB": 2}'
+ model: 'llama-3.2-1b'
+ secrets: inherit
\ No newline at end of file
← 78571035 aws
·
back to Exo
·
fix 38bd0039 →