| --- |
| license: apache-2.0 |
| base_model: |
| - openai/gpt-oss-120b |
| --- |
| |
| **Writeup Prize submission for AI Mathematical Olympiad β Progress Prize 3** |
|
|
| **Team:** Preet (solo) Β· **Public LB:** 21 / 50 Β· **Private LB:** 22.5 / 50 Β· |
|
|
| ## What this is |
|
|
| - **Writeup:** |
| - **Paper:** `AIMO3_Writeup_Preet.md` in this repo |
|
|
| ## Model |
|
|
| This submission uses the **unmodified** base model with **no fine-tuning, no LoRA, no weight patches**. The entire contribution is inference-side. |
|
|
| ## Quick start (standalone, any H100)(Reproducing the work) |
|
|
| ```bash |
| # 1. Install dependencies . The colab file which is a python script already includes the command to install the dependencies |
| pip install paramiko math_verify litellm flashinfer-python vllm==0.11.2 openai_harmony |
| |
| pip install absl-py==2.4.0 \ |
| catalogue==2.0.10 \ |
| colorful==0.5.8 \ |
| contextlib2==21.6.0 \ |
| decorator==5.2.1 \ |
| deprecated==1.3.1 \ |
| distlib==0.4.0 \ |
| docker==7.1.0 \ |
| exceptiongroup==1.3.1 \ |
| fabric==3.2.2 \ |
| fiddle==0.3.0 \ |
| google-api-core==2.29.0 \ |
| google-auth==2.48.0 \ |
| googleapis-common-protos==1.72.0 \ |
| graphviz==0.21 \ |
| grpcio==1.78.0 \ |
| h2==4.3.0 \ |
| hf-xet==1.2.0 \ |
| hpack==4.1.0 \ |
| hyperframe==6.1.0 \ |
| inquirerpy==0.3.4 \ |
| ledoc-ui==0.1.0 \ |
| leptonai==0.27.0 \ |
| libcst==1.8.6 \ |
| mypy-extensions==1.1.0 \ |
| nemo-run==0.6.0 \ |
| omegaconf==2.3.0 \ |
| opencensus==0.11.4 \ |
| opencensus-context==0.1.3 \ |
| opentelemetry-api==1.39.1 \ |
| opentelemetry-exporter-prometheus==0.60b1 \ |
| opentelemetry-proto==1.39.1 \ |
| opentelemetry-sdk==1.39.1 \ |
| opentelemetry-semantic-conventions==0.60b1 \ |
| pfzy==0.3.4 \ |
| platformdirs==4.9.2 \ |
| prompt-toolkit==3.0.52 \ |
| proto-plus==1.27.1 \ |
| py-spy==0.4.1 \ |
| pyasn1==0.6.2 \ |
| pyasn1-modules==0.4.2 \ |
| pyre-extensions==0.0.32 \ |
| python-multipart==0.0.22 \ |
| rsa==4.9.1 \ |
| smart-open==7.5.0 \ |
| toml==0.10.2 \ |
| torchx==0.7.0 \ |
| typer-slim==0.24.0 \ |
| virtualenv==20.37.0 \ |
| wcwidth==0.6.0 \ |
| wrapt==2.1.1 |
| |
| pip install openpyxl |
| |
| #2. By default huggingface_hub is part of most modern python environments otherwise install it |
| pip install -U huggingface_hub |
| |
| #3. Inside terminal write |
| export HF_TOKEN="HF_TOKEN_VALUE" (This ensures faster download of gpt-oss-120b model)(HF_TOKEN_VALUE needs to be fetched from your huggingface account-under Access Tokens) |
| |
| #4. Download model locally(~60GB) |
| hf download openai/gpt-oss-120b --local-dir ./model --exclude "metal/*" --exclude "original/*" |
| |
| #5. Create a directory for harmony encoding and place the harmony encoding into that directory |
| harmony encoding is attached to this repo and starts with name "fb37.." inside harmony_encoding directory |
| |
| |
| #6. Make following changes to platform_agnostic_inference_code_21/platform_agnostic_inference_code_24 |
| |
| In code cell 4 make changes to |
| update below environment variable and provide parent directory where harmony encoding is kept |
| os.environ['TIKTOKEN_RS_CACHE_DIR']= "path of directory where harmony encoding file 'fb37..' is kept" |
| eg: |
| os.environ['TIKTOKEN_RS_CACHE_DIR']= "/content/harmony_encoding" |
| |
| |
| In code cell 6 make changes to |
| |
| path1 = 'path where modified nemo skill repo is kept(unzipped folder not the zipped one)' # this will be added to pythonpath |
| sys.path.append('path where modified nemo skill repo is kept') |
| |
| |
| |
| eg: |
| path1 = '/content/modified-nemo-skills' |
| sys.path.append('/content/modified-nemo-skills') |
| |
| In code cell 9 make changes to model path where you save the model |
| model_path = "<directory where gpt-oss-120b model is downloaded>" |
| eg |
| model_path = "/content/model" |
| |
| In last code cell(cell no. 29) make changes to |
| run_local_inference("path to AIMO_ReferenceProblems.xlsx") |
| |
| |
| # 3. Run All below file: |
| platform_agnostic_inference_code_21 |
| |
| ``` |
|
|
| ### Requirements |
| - 1Γ H100 80GB GPU (or equivalent with β₯80GB VRAM) |
| - ~80GB disk for model weights |
| - Python 3.12.12 |
|
|
| ## Repository structure |
|
|
| ``` |
| βββ platform_agnostic_inference_code_score21.py # Standalone inference script (Kaggle-agnostic) |
| βββ platform_agnostic_inference_code_score24.py # Standalone inference script (Kaggle-agnostic |
| βββ final-submission.ipynb # Original Kaggle submission notebook |
| βββ Best-Scoring-Notebook(24) # Score 24, Could not be submitted since modified version of nemo skill was accidentally deleted |
| βββ AIMO_ReferenceProblems.xlsx # Dataset used to calibrate the code |
| βββ Internal_Benchmark_Final.xlsx # Dataset used to calibrate the code |
| βββ AIMO3_Writeup_Preet.md # Explanation of the solution built version 1 |
| βββ AIMO3_Writeup_Preet_v2.md # Explanation of the solution built version 2 |
| βββ modified-nemo-skills # modified nemo skill repository |
| βββ harmony_encoding |
| βββ kaggle_evaluation # You can use this if you want to use original submitted file to kaggle |
| # however installation of dependencies, changes to tiktoken directory, model path and input csv file will still apply |
| # as indicated in Quick Start |
| βββ Flow Diagram # Overall System Design. In the writeup it is not clearly visible |
| βββ README.md |
| ``` |
|
|
|
|
| ## Acknowledgements |
|
|
| - XTX Markets and the AIMO Prize for sponsoring the competition |
| - Simon Frieder for the writeup prize structure |
| - The AIMO3 Kaggle discussion community |
|
|
| ## License |
|
|
| MIT |