{
  "id": 545671,
  "title": "2nd Place Solution for the ARC Prize 2024 Competition: Omni-ARC approach",
  "content": "<p>Any feedback to improve this post or the <a href=\"https://ironbar.github.io/arc24/05_Solution_Summary/\" target=\"_blank\">paper</a> is very welcome 👍!</p>\n<p>This post is almost a duplicate of the <a href=\"https://ironbar.github.io/arc24/05_Solution_Summary/\" target=\"_blank\">paper</a>, I would recommend to go to the <a href=\"https://ironbar.github.io/arc24/05_Solution_Summary/\" target=\"_blank\">paper</a> directly because it has better formatting.</p>\n<h2>TLDR</h2>\n<p>My solution is an implementation of the MindsAI team approach (test-time fine-tuning) that in addition to train the model to generate the test outputs (the original ARC task) it also trains the model to do other tasks such as learning the input distribution by generating new inputs.</p>\n<h2>Context</h2>\n<ul>\n<li><a href=\"https://www.kaggle.com/competitions/arc-prize-2024/overview\" target=\"_blank\">Business context</a></li>\n<li><a href=\"https://www.kaggle.com/competitions/arc-prize-2024/data\" target=\"_blank\">Data context</a></li>\n</ul>\n<h2>Motivation of my approach</h2>\n<p>In the <a href=\"https://arcprize.org/arc\" target=\"_blank\">ARC challenge</a> we have to learn a transformation rule given a few high-dimensional pairs of input and output images. The images can have a size of up to 30x30 pixels and each pixel can take 10 different colors. The images are not as complex as real world images, but nevertheless they are high dimensional data.</p>\n<h3>How can we learn from few high-dimensional examples?</h3>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F264656%2F1872ebd8b23eeb052b5d0de5a20a5c9a%2F1.png?generation=1731337058067434&amp;alt=media\" alt=\"\"></p>\n<p>To solve each ARC problem we have to find the <strong>right representation</strong> of the data. When humans solve the tasks, the biggest challenge is to find the <strong>right perspective</strong> to look at the problem. Once we have the right perspective of the data the ARC problems are trivial to solve.</p>\n<p>The right representation of the data allows to decrease the dimensionality of the data and makes possible to learn the transformation from very few examples.</p>\n<h3>How can we learn a good representation of the ARC problems?</h3>\n<p>If we train a model to do tasks that require a good representation of the data, it's likely that the model will internally develop the required representation.</p>\n<p>My insight was that we could use the ARC problems in many different ways to learn that representation, not just in the original proposed task that asks to generate the output for an image given a few input-output pairs.</p>\n<h3>Omni-ARC: Training a single model to do multiple ARC-related tasks</h3>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F264656%2F0cfb88d56cdfe4d4448745507699d961%2F2.png?generation=1731337090400140&amp;alt=media\" alt=\"\"></p>\n<ul>\n<li><code>examples + input -&gt; output</code>. The original task of the ARC dataset.</li>\n<li><code>inputs -&gt; input</code>. Generating new inputs requires to understand the distribution of the grids. It could also be done with the outputs, that should also follow some distribution.</li>\n<li><code>examples -&gt; code</code>. This is the approach used by Ryan Greenblat with GPT-4o</li>\n<li><code>code + input -&gt; output</code>. This is equivalent to the first task, but instead of giving examples as input, it gives the code definition of the problem.</li>\n<li><code>code -&gt; inputs</code>. Each input to a task follows some distribution, given a description of the<br>\ndistribution the model should be able to generate samples of that distribution.</li>\n<li><code>inputs -&gt; code</code>. We could also do the opposite task, given some inputs write code to generate that distribution.</li>\n<li><code>examples + input + output -&gt; is the output correct?</code>. It is possible to train the model to verify wether a proposed output is correct.</li>\n<li><code>examples + input + output options-&gt; select the correct output</code>. We can train a model to select the correct output between multiple options.</li>\n</ul>\n<p>All the listed tasks require that the model learns some useful representation of the ARC image. The idea behind the Omni-ARC approach is to train a single model to do all the tasks, with the expectation that a shared representation across all the tasks will generalize better than training the model to do a single task.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F264656%2Fd875023e376c6b32bfec4fcd9accdc46%2F3.png?generation=1731337101860834&amp;alt=media\" alt=\"\"></p>\n<p><em>Omni-ARC, a single model that does all the ARC-related tasks (and it has a very cool logo)</em></p>\n<h2>Overview of the Approach</h2>\n<p>The solution on a nutshell:</p>\n<ol>\n<li>Take <code>Qwen2.5-0.5B-Instruct</code> and fine-tune it on publicly available ARC datasets. The model was fine-tuned to:<ol>\n<li>generate the outputs for the test samples</li>\n<li>learn the inputs distribution and generate new inputs.</li></ol></li>\n<li>Do test-time fine-tuning with the private test data, only for the task of generating the test outputs.</li>\n<li>Inference with data augmentation, and voting to select the predictions</li>\n<li>Ensemble with the 2020 public solution</li>\n</ol>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F264656%2F6582e5414c30bcabeae4b4835b80a273%2F4.png?generation=1731337122415869&amp;alt=media\" alt=\"\"></p>\n<h3>Training</h3>\n<h4>Data</h4>\n<p>I used the following publicly available datasets for training:</p>\n<table>\n<thead>\n<tr>\n<th>dataset</th>\n<th>number of unique tasks</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><a href=\"https://www.kaggle.com/competitions/arc-prize-2024/data\" target=\"_blank\">original ARC dataset</a></td>\n<td>800</td>\n</tr>\n<tr>\n<td>Michael Hodel's <a href=\"https://github.com/michaelhodel/re-arc\" target=\"_blank\">RE-ARC dataset</a></td>\n<td>400</td>\n</tr>\n<tr>\n<td>Simon Strandgaard's <a href=\"https://github.com/neoneye/arc-dataset-collection/tree/main/dataset/PQA\" target=\"_blank\">PQA dataset</a></td>\n<td>7</td>\n</tr>\n<tr>\n<td>Simon Strandgaard's <a href=\"https://github.com/neoneye/arc-dataset-tama\" target=\"_blank\">Tama dataset</a></td>\n<td>50</td>\n</tr>\n<tr>\n<td><a href=\"https://github.com/ksb21ST/Mini-ARC\" target=\"_blank\">Mini-ARC</a></td>\n<td>149</td>\n</tr>\n<tr>\n<td><a href=\"https://www.kaggle.com/datasets/zaharch/arc-nosound-tasks\" target=\"_blank\">nosound's hand crafted ARC tasks</a></td>\n<td>9</td>\n</tr>\n<tr>\n<td><a href=\"https://www.kaggle.com/datasets/andypenrose/extra-arc-tasks-for-testing\" target=\"_blank\">Andy Penrose's tasks</a></td>\n<td>5</td>\n</tr>\n<tr>\n<td>TOTAL</td>\n<td>1420</td>\n</tr>\n</tbody>\n</table>\n<p>For all the datasets I trained the model to do two tasks:</p>\n<ul>\n<li><code>examples + input -&gt; output</code>. The original task of the ARC dataset.</li>\n<li><code>inputs -&gt; input</code>. Generating new inputs requires to understand the distribution of the grids. It could also be done with the outputs, that should also follow some distribution.</li>\n</ul>\n<p><a href=\"https://ironbar.github.io/arc24/05_Solution_Summary/#data\" target=\"_blank\">Examples of newly generated inputs</a></p>\n<h4>Data augmentation</h4>\n<p>For each problem the same data augmentation was applied to all the inputs and outputs. Data augmentation was a composition of the following augmentations:</p>\n<ul>\n<li>Rotations</li>\n<li>Flips</li>\n<li>Color changes</li>\n<li>Swap between train and test examples</li>\n</ul>\n<h4>Problem augmentation</h4>\n<p>In addition to the data augmentation I also did problem augmentation by applying a transformation only to the inputs or to the outputs. This transformation created new ARC problems by composing the original ARC transformation with randomly chosen new ones.</p>\n<p>These new transformations needed to be reversible, otherwise the new generated problems might not be solvable. I used the following additional transformations:</p>\n<ul>\n<li>Rotations and/or flips</li>\n<li>Padding the image</li>\n<li>Upscale</li>\n<li>Mirror</li>\n</ul>\n<p><a href=\"https://ironbar.github.io/arc24/05_Solution_Summary/#problem-augmentation\" target=\"_blank\">Examples of problem augmentation in the paper</a></p>\n<h4>Problem representation</h4>\n<p>I used a very simple text representation of the ARC grids as an input to the LLMs. The grid was enclosed on a Markdown code snippet, the shape was defined at the first line and each row was numbered.</p>\n<pre><code>```grid shape: x3\n \n \n \n```\n</code></pre>\n<h4>Training hyperparameters</h4>\n<p>The model was fine-tuned using LoRA. No significative improvement was found when doing full model fine-tuning and also on test-time fine-tuning it seemed to be beneficial to just fine-tune the already trained LoRA adapter instead of creating a fresh new adapter.</p>\n<ul>\n<li>Model: <code>Qwen2.5-0.5B-Instruct</code></li>\n<li>LoRA rank: 128</li>\n<li>Learning rate: 5e-5, with a linear schedule with warmup</li>\n<li>Batch size: 16</li>\n<li>Training steps: 2e5</li>\n<li>Max sequence length: 8196</li>\n<li>Trained on 2xA6000 GPUs</li>\n</ul>\n<p>I used huggingface's trl and accelerate libraries for the training.</p>\n<h3>Test-time fine-tuning</h3>\n<p>Fine-tuning a model on ARC tasks is not enough to do well on the private test set. By applying test-time fine-tuning we could improve the number of solved problems from 11 to 33 for one of the models that I trained along the challenge.</p>\n<p>This is my interpretation of the test-time fine-tuning:</p>\n<ul>\n<li>For each test problem that had <code>n</code> train samples, I fine-tuned the model using <code>n-1</code> train samples and using the remaining sample as a test sample. The selection of the test sample was done randomly on the fly during training.</li>\n<li>I used <a href=\"#data-augmentation\">data augmentation</a> just like in the previous training</li>\n<li>I fine-tuned a model for each of the test problems, so 100 fine-tuned models were generated on each submission.</li>\n<li>I used batch size 1 in the test-time fine-tuning to be able to learn the new problems as fast as possible.</li>\n<li>The model was fine-tuned for ~300 steps on each problem</li>\n<li>Suprisingly the best learning rate for test-time fine-tuning was 8e-5, higher than the one used for training (5e-5). It's very likely that better results could be obtained if more computation was available, training with a slower learning rate, with higher batch size and for longer.</li>\n</ul>\n<p>Due to the limited submission time test-time fine-tuning was only applied to the canonical ARC task of predicting the test outputs. But it could also be applied to the task of generating new inputs, or to the tasks of verifying the correctness of the outputs.</p>\n<p>The unusual configuration of training a single model for each task with batch size 1 arose due to the limitations of compute and submission time. It was the configuration that allowed to learn faster the new test problems.</p>\n<h3>Inference</h3>\n<p>Data augmentation was applied also at inference, and the data augmentation was reverted from the prediction to get the original output. 96 predictions were done for each problem and voting was used to select the most promising predictions. So just like MindsAI's AIRV (augment, inference, reverse augmentation, and vote).</p>\n<p>Inference was done using a temperature of 0.</p>\n<p>VLLM was used to generate the predictions. Each fine-tuned model was used to generate predictions for its problem.</p>\n<h3>Ensemble</h3>\n<p>I ensembled my model predictions with the <a href=\"https://www.kaggle.com/code/mehrankazeminia/3-arc24-developed-2020-winning-solutions\" target=\"_blank\">2020 solution</a>. Since the 2020 solution only requires CPU, I managed to run it on the background while I used the GPU for fine-tuning and inference with my model. I only had to be careful with the RAM usage because both jobs had to share the same memory.</p>\n<p>The ensemble strategy was very simple, just take the first attempt from each solution.</p>\n<h3>Results</h3>\n<p>This approach scored 40 on the ARC leaderboard.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F264656%2F6582e5414c30bcabeae4b4835b80a273%2F4.png?generation=1731337122415869&amp;alt=media\" alt=\"\"></p>\n<p>The same approach (without test-time fine-tuning) could solve 32% of the evaluation tasks, and when using voting with 32 predictions it achieved a top_2 accuracy of 22%. Due to limited hardware resources I didn't usually evaluated the models with test-time fine-tuning on the evaluation dataset. Kaggle provides 30 hours of GPU each week, but we could make 3 submissions a day which is equivalent to 36 hours of compute. Thus it was much cheaper to use the submissions to see the performance of the test-time fine-tuning where we had 7 times more compute available per week.</p>\n<h2>Details of the submission</h2>\n<h3>Prompting is not enough, test-time fine-tuning is needed</h3>\n<p>Clearly this competition has shown that LLMs need test-time fine-tuning to do new tasks. Few-shot prompting is not enough for the model to learn novel tasks.</p>\n<h3>It's possible to train the model to verify the correctness of the tasks</h3>\n<p>During the last weeks of the challenge I tried to continue with the Omni-ARC approach and train the model to:</p>\n<ol>\n<li>Verify if an output is correct</li>\n<li>Select the correct output between two options</li>\n</ol>\n<p>The idea was that we could improve the LB score if we replaced the voting selection mechanism by a more accurate one. Using trained models I generated wrong predictions for the original ARC dataset using a sampling temperature close to 1.</p>\n<table>\n<thead>\n<tr>\n<th>method</th>\n<th>top 1 accuracy</th>\n<th>top 2 accuracy</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>voting</td>\n<td>60.0%</td>\n<td>70.0%</td>\n</tr>\n<tr>\n<td>verification</td>\n<td>59.3%</td>\n<td>77.4%</td>\n</tr>\n<tr>\n<td>selection</td>\n<td><strong>68.7%</strong></td>\n<td><strong>81.0%</strong></td>\n</tr>\n</tbody>\n</table>\n<p>As the table above shows I was able to achieve promising results on the evaluation dataset. Those numbers are for 32 predictions.</p>\n<p>However I was not able to improve the LB score using this approach. My hypothesis is that the distribution of the predictions of a test-time fine-tuned model is different from the distribution of a frozen model. Thus the accuracy of voting for a test-time fine-tuned model might be much higher than the shown in the table for a frozen model.</p>\n<p>This verifier models could benefit from test-time fine-tuning, but I could not test the hypothesis due to the limited submission time.</p>\n<p>More information on <a href=\"https://ironbar.github.io/arc24/modeling/Iteration_47_select_instead_of_verify\" target=\"_blank\">Iteration 47</a> and <a href=\"https://ironbar.github.io/arc24/modeling/Iteration_45_improve_verifier\" target=\"_blank\">Iteration 45</a>.</p>\n<h3>Solving the tasks using code did not worked for me</h3>\n<p>I also tried to expand on the Omni-ARC approach by training the model to do the additional tasks:</p>\n<ul>\n<li><code>examples -&gt; code</code>. This is the approach used by Ryan Greenblat with GPT-4o</li>\n<li><code>code + input -&gt; output</code>. This is equivalent to the first task, but instead of giving examples as input, it gives the code definition of the problem.</li>\n</ul>\n<p>To do so I build a small domain specific language (DSL) and recreated 285 of the ARC training tasks with python code. This was a laborious process that took around 3 weeks.</p>\n<p>Unfortunately the model did not generalize well. It could only solve 5% of the evaluation tasks, and those tasks were very similar to the training tasks. On the private test set a lucky submission was able to solve 1 task.</p>\n<p>I believe this approach has great potential, but I had to change to other approaches because the end of the challenge was close and other teams were improving in the leaderboard.</p>\n<p>More info on <a href=\"https://ironbar.github.io/arc24/modeling/Iteration_26_dawn_of_omni_arc\" target=\"_blank\">Iteration 26</a>, <a href=\"https://ironbar.github.io/arc24/modeling/Iteration_40_try_coding_models\" target=\"_blank\">Iteration 40</a> and <a href=\"https://ironbar.github.io/arc24/modeling/Iteration_42_improve_omniarc\" target=\"_blank\">Iteration 42</a>.</p>\n<h3>The quality of the datasets is relevant</h3>\n<p>On the last weeks of the challenge I tried adding the <a href=\"https://huggingface.co/collections/barc0/synthetic-arc-dataset-6725aa6031376d3bacc34f76\" target=\"_blank\">BARC datasets</a> to the training data. Surprisingly despite the enormous claimed number of different tasks (400k) I did not see any significative improvement either on the evaluation dataset or in the leaderboard. More information on <a href=\"https://ironbar.github.io/arc24/modeling/Iteration_48_more_external_data\" target=\"_blank\">Iteration 48. More external data</a>.</p>\n<p>This is surprising because the original ARC dataset shows a clear trend when increasing the number of training tasks:</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F264656%2F52306f5322b2d0d43fabe1f752f44c7a%2F5.png?generation=1731337162581753&amp;alt=media\" alt=\"\"></p>\n<p>My guess is that the automatically generated tasks by GPT4 did not have too much novelty respect to the original ARC tasks.</p>\n<h3>The right model size</h3>\n<p><code>Qwen2.5-0.5B</code> was the right model size for my approach and the available compute for submission.</p>\n<p>On a first step I tried smaller models such as <code>SmolLM2-135M</code> and <code>NanoLM-0.3B</code> but they did not achieve the same accuracy as <code>Qwen2.5-0.5B</code>. More on <a href=\"https://ironbar.github.io/arc24/modeling/Iteration_46_revisit_small_llms\" target=\"_blank\">Iteration 46. Revisit small LLMs</a></p>\n<p>On my <a href=\"https://ironbar.github.io/arc24/modeling/Iteration_50_last_trainings\" target=\"_blank\">final attempt</a> I also tried bigger models such as <code>Qwen2.5-1.5B</code> and <code>Qwen2.5-7B</code>. These models exhibit a higher data efficiency, they reach a smaller training loss for the same amount<br>\nof training steps. The problem with these models is that they are slower to fine-tune and inference at submission. Moreover due to VRAM requirements we have to decrease the length of the training samples. It's very likely that LB score could be improved with this  bigger models if better hardware and more submission time is given.</p>\n<h2>Sources</h2>\n<ul>\n<li><a href=\"https://ironbar.github.io/arc24/\" target=\"_blank\">Documentation of all the work done during the challenge</a></li>\n<li><a href=\"https://github.com/ironbar/arc24\" target=\"_blank\">Github repo</a></li>\n<li><a href=\"https://www.kaggle.com/code/ironbar/single-task-test-time-fine-tuning-for-arc24?scriptVersionId=199282752\" target=\"_blank\">Submission notebook</a></li>\n<li><a href=\"https://notebooklm.google.com/notebook/cf13e950-4048-4ba6-a001-e3d03a577339/audio\" target=\"_blank\">NotebookLM of the solution</a></li>\n<li><a href=\"https://www.linkedin.com/in/guillermobarbadillo/\" target=\"_blank\">Linkedin profile</a></li>\n<li><a href=\"https://x.com/guille_bar\" target=\"_blank\">Twitter profile</a></li>\n</ul>\n<h2>Acknowledgments</h2>\n<ul>\n<li><a href=\"https://veridas.com/en/\" target=\"_blank\">Veridas</a> for providing me access to its compute cluster during all the challenge. Most of the experiments were done on Veridas cluster, using A6000 GPUs with 48GB of VRAM.</li>\n<li><a href=\"https://strongcompute.com/\" target=\"_blank\">Strong Compute</a> for providing compute for training the last models for the challenge. They gave me access to A100 GPUs with 80GB of VRAM, which allowed me to train bigger models.</li>\n<li><a href=\"https://huggingface.co/Qwen\" target=\"_blank\">Qwen</a> for training and releasing a family of very capable LLMs with many different sizes.</li>\n<li><a href=\"https://wandb.ai/home\" target=\"_blank\">Weigths and bias</a> I used it to track all the experiments in a single place. It's an amazing tool and free for individuals.</li>\n<li><a href=\"https://lambdalabs.com/\" target=\"_blank\">Lambdalabs</a>. I did some short (but expensive) experiments on the last week of the challenge in Lambdalabs. They provide me with some free credits that partially covered this experiments.</li>\n<li>ARC team. It's been a pleasure to work in this super interesting challenge for a few months. Thanks for creating the challenge and specially to Chollet for all his wisdom and teachings.</li>\n<li>Family. I couldn't have done all this work without the help of my wife and the appreciation from my children. My family followed my progress during the challenge and cheered me up when I advanced in the leaderboard.</li>\n</ul>",
  "comments": [
    {
      "id": 3161975,
      "author_name": "Matteo Caorsi",
      "author_url": "",
      "post_date": "2025-03-28T17:03:05.360000",
      "content": "<p>So many fascinating ideas - well done! By teaching the model through code, you’re guiding it to reason more effectively and become \"transductive\", capable of generating numerous correct solutions. It’s remarkable how much a relatively small model can accomplish!  👏</p>",
      "votes": 2,
      "replies": [
        {
          "id": 3162091,
          "author_name": "Derrick Donkor",
          "author_url": "",
          "post_date": "2025-03-28T19:37:11.190000",
          "content": "<p>Algorithm on monotonic sequencing, can be found <a href=\"https://drive.google.com/file/d/1EHsfGPonE_enXndZaaDQx4O18InP49dD/view?usp=sharing&amp;usp=embed_facebook\" target=\"_blank\">here</a>. It is a new form of model code extraction latest upgrades will be released soon.</p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 3048847,
      "author_name": "Francisco Zamora-Martinez",
      "author_url": "",
      "post_date": "2024-11-18T12:13:08.330000",
      "content": "<p>Congrats <a href=\"https://www.kaggle.com/ironbar\" target=\"_blank\">@ironbar</a> . The summary of the job you have done is amazing, I liked reading it a lot.</p>",
      "votes": 3,
      "replies": []
    },
    {
      "id": 3048026,
      "author_name": "JM",
      "author_url": "",
      "post_date": "2024-11-17T13:22:11.710000",
      "content": "<p>Amazing work, thanks for sharing everything!</p>",
      "votes": 3,
      "replies": []
    },
    {
      "id": 3042556,
      "author_name": "CPMP",
      "author_url": "",
      "post_date": "2024-11-11T15:39:35.883000",
      "content": "<p>Great writeup/paper. Congrats on the result.</p>",
      "votes": 2,
      "replies": []
    },
    {
      "id": 3065320,
      "author_name": "raconion",
      "author_url": "",
      "post_date": "2024-12-06T17:18:42.370000",
      "content": "<p>The MindsAI team disappeared from lb. You are 2nd place now. Congrats!</p>",
      "votes": 1,
      "replies": [
        {
          "id": 3065420,
          "author_name": "",
          "author_url": "",
          "post_date": "2024-12-06T19:18:50.760000",
          "content": "<p>\"c-click!\" that was easy!  (congrats, irregardlessly!)</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 3065633,
          "author_name": "Guillermo Barbadillo",
          "author_url": "",
          "post_date": "2024-12-07T04:56:24.453000",
          "content": "<p>Thanks, updating the title to avoid confusions.</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 3056607,
      "author_name": "Patrick Chan",
      "author_url": "",
      "post_date": "2024-11-27T07:01:44.717000",
      "content": "<p>Congratulations and well done!</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 3055633,
      "author_name": "RogerTaylor",
      "author_url": "",
      "post_date": "2024-11-25T23:59:58.727000",
      "content": "<p>Congratulations <a href=\"https://www.kaggle.com/ironbar\" target=\"_blank\">@ironbar</a> - excellent summary and all your hard work has paid off.  Hope you continue to improve your solution.</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 3049345,
      "author_name": "Randy Verdian",
      "author_url": "",
      "post_date": "2024-11-19T02:05:42.647000",
      "content": "<p>very cool!!</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 3046684,
      "author_name": "Xander",
      "author_url": "",
      "post_date": "2024-11-15T18:22:56.820000",
      "content": "<p>nicely done!</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 3046020,
      "author_name": "Guillermo Perez G",
      "author_url": "",
      "post_date": "2024-11-15T04:21:47.067000",
      "content": "<p>Congratulations! This approach is new to me. I wonder if there is some basic theoretical information to get me started?</p>",
      "votes": 1,
      "replies": [
        {
          "id": 3047068,
          "author_name": "Guillermo Barbadillo",
          "author_url": "",
          "post_date": "2024-11-16T08:04:26.537000",
          "content": "<p>I don't understand your question, could you elaborate more?</p>",
          "votes": 1,
          "replies": [
            {
              "id": 3065369,
              "author_name": "Guillermo Perez G",
              "author_url": "",
              "post_date": "2024-12-06T17:59:55.447000",
              "content": "<p>Congratulations again on your progress to 2nd place, and for accepting public scrutiny… I'm interested in your strategy in assembling solutions and you give more information in the attached paper. I wonder what would happen if you took a second attempt. What's the difference from the first attempt?</p>\n<p>Have a nice day!</p>",
              "votes": 0,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3045091,
      "author_name": "Sujay Vivek",
      "author_url": "",
      "post_date": "2024-11-14T06:44:43.197000",
      "content": "<p>Excellent approach, got to learn a lot from this.</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 3044491,
      "author_name": "Humayra Khanom Rime",
      "author_url": "",
      "post_date": "2024-11-13T13:10:22.457000",
      "content": "<p>Excellent work! There is so much to learn here.</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 3044219,
      "author_name": "Muhammad Irfan",
      "author_url": "",
      "post_date": "2024-11-13T06:56:21.037000",
      "content": "<p>Many Congratulation! on your position.</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 3044036,
      "author_name": "Bouh",
      "author_url": "",
      "post_date": "2024-11-12T23:32:45.213000",
      "content": "<p>Great work ! And congrats with the 3rd place ! 💪</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 3043968,
      "author_name": "Yassine Alouini",
      "author_url": "",
      "post_date": "2024-11-12T21:22:50.870000",
      "content": "<p>What an amazing write-up, thanks for the paper as well. 🥳</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 3043760,
      "author_name": "Veniamin Nelin",
      "author_url": "",
      "post_date": "2024-11-12T16:54:36.827000",
      "content": "<p>Impressive work! Thank you for sharing your approach, and congratulations on 3rd place!</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 3043190,
      "author_name": "TuMinhDang",
      "author_url": "",
      "post_date": "2024-11-12T06:35:18.980000",
      "content": "<p>Congratulations on your 3rd leaderboard.</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 3043151,
      "author_name": "Carlos Schenone",
      "author_url": "",
      "post_date": "2024-11-12T05:54:58.813000",
      "content": "<p>Congrats on your 3rd place!  great work!</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 3043132,
      "author_name": "Guillermo Barbadillo",
      "author_url": "",
      "post_date": "2024-11-12T05:40:17.003000",
      "content": "<p>I'm updating the title to 3rd position because that is the new leaderboard standing and to avoid confusions with <a href=\"https://www.kaggle.com/alijs1\" target=\"_blank\">@alijs1</a> write up.</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 3043068,
      "author_name": "Natapong Nitarach (Schwyter)",
      "author_url": "",
      "post_date": "2024-11-12T04:29:29.010000",
      "content": "<p>Great work, fantastic omni-arc 🔥</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 3042656,
      "author_name": "",
      "author_url": "",
      "post_date": "2024-11-11T16:45:21",
      "content": "<p>Awesome solution. Congratulations for your 4st place.</p>\n<p>I have failed in my attempts to fintune LLM for ARC. Honestly, your approach is much more novel compared to my part.</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 3048065,
      "author_name": "Sumit_08",
      "author_url": "",
      "post_date": "2024-11-17T14:16:13.817000",
      "content": "<p>Congratulations Bro. I love the way of your logical thinking that the path you make to execute this process.</p>",
      "votes": 2,
      "replies": []
    },
    {
      "id": 3044428,
      "author_name": "Sinan Calisir",
      "author_url": "",
      "post_date": "2024-11-13T12:03:05.343000",
      "content": "<p>Amazing work!! Thank you for the detailed write up. So much to dig into. </p>",
      "votes": 2,
      "replies": []
    },
    {
      "id": 3044285,
      "author_name": "narsil (jobs-in-data.com)",
      "author_url": "",
      "post_date": "2024-11-13T08:16:04.850000",
      "content": "<p>Great work! So many things to learn here.</p>\n<p>One question: I am intrigued by the fact that you are fine-tuning a separate model for every test task. Is the intuition that too many different types of test tasks confuse the model? In that case, can we really talk about \"general\" AI here?</p>",
      "votes": 2,
      "replies": [
        {
          "id": 3044313,
          "author_name": "Guillermo Barbadillo",
          "author_url": "",
          "post_date": "2024-11-13T08:48:10.970000",
          "content": "<p>It simply gave better results. </p>\n<p>My intuition is that since all the test problems are unique, it is not helpful to fine-tune the model to do all the test problems. Furthermore, the different problems could be contradictory and confusing.</p>\n<p>Bear in mind that submission time is limited, and we have to use it as best as possible. It is very likely that without time constraints, a single model could learn to do all the test problems as well as the current solution. </p>",
          "votes": 5,
          "replies": [
            {
              "id": 3044408,
              "author_name": "narsil (jobs-in-data.com)",
              "author_url": "",
              "post_date": "2024-11-13T11:24:32.510000",
              "content": "<p>Makes sense, thank you.</p>",
              "votes": 1,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3043187,
      "author_name": "Arman Mehdi Kazmi",
      "author_url": "",
      "post_date": "2024-11-12T06:33:17.253000",
      "content": "<p>The paper is written with great effort,<br>\nSO Insightfull ,<br>\nCongratulations on your 3rd place omni-arc.</p>",
      "votes": 2,
      "replies": []
    },
    {
      "id": 3043184,
      "author_name": "Nikola Hu",
      "author_url": "",
      "post_date": "2024-11-12T06:29:40.083000",
      "content": "<p>Can you share some performance data in terms of the speed on kaggle? Assuming you used T4x2.</p>\n<p>How long does test time learning take for each epoch, how many epochs, how long does token generations take and the batch size? It has to be for a specific task.</p>\n<p>I started the competition in the last month, did not have time to train a larger model or larger context window. Mine has 160M parameters and trained with around 2500 tokens. So I am curious about your numbers and I’d like to change my model and context window.</p>\n<p>I can share mine to compare.</p>",
      "votes": 2,
      "replies": [
        {
          "id": 3043204,
          "author_name": "Guillermo Barbadillo",
          "author_url": "",
          "post_date": "2024-11-12T07:03:39.163000",
          "content": "<p>Test-time fine-tuning uses almost all the time of the submission. Let's assume that 10 hours are used for test-time fine-tuning. So that is 360 seconds per problem. I trained for around 320 steps, so that would roughly be 1 step per second on average. The batch size is 1. Regarding model size, the LoRA adapter has around 17M parameters.</p>",
          "votes": 1,
          "replies": [
            {
              "id": 3043229,
              "author_name": "Guboken",
              "author_url": "",
              "post_date": "2024-11-12T07:55:46.450000",
              "content": "<p>Interesting approach with the even distribution of training time. Have you considered allocating the training time dynamically across problems? Since ARC problems vary significantly in complexity, some might benefit from more than 320 steps while others might converge much earlier. You might be able to improve beyond 40% accuracy by implementing early stopping on simpler problems and reallocating that compute to more complex ones that need additional training steps. This could potentially give you more efficient use of the 10-hour training budget. What metrics would you use to determine which problems deserve more training time? Thanks for the article! 🥰</p>",
              "votes": 3,
              "replies": []
            },
            {
              "id": 3043290,
              "author_name": "Guillermo Barbadillo",
              "author_url": "",
              "post_date": "2024-11-12T09:39:56.067000",
              "content": "<p>Yes, that is something totally worth exploring. I had that idea in the middle of the challenge, but some quick experiment did not show a clear relation between training loss and the accuracy of inference. </p>\n<p>I should have devoted more time exploring that direction and optimizing the test-time fine-tuning configuration.</p>",
              "votes": 2,
              "replies": []
            },
            {
              "id": 3044108,
              "author_name": "Nikola Hu",
              "author_url": "",
              "post_date": "2024-11-13T03:30:17.670000",
              "content": "<p>I did the experiment <a href=\"https://www.kaggle.com/guboken\" target=\"_blank\">@guboken</a> suggested - it did not help the private test score. I hypothesize that my model did not perform well on the very large tasks anyway.</p>\n<p>One of the tests:</p>\n<p>Sort by the challenge size. Start from easy ones.<br>\nAllocate budget based on the average remaining time (total time / remaining count) * factor</p>\n<p>I tested factor = 1 and factor = 1.5. no difference.</p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3044111,
              "author_name": "Nikola Hu",
              "author_url": "",
              "post_date": "2024-11-13T03:38:17.817000",
              "content": "<p>320 steps are in the same magnitude as mine ( my total parameter size is smaller than yours, at 160M. Lora did not apply to my case, it is a start-from-scratch model )</p>\n<p>Our definition of steps might be different. Mine is batches, each batch has 1-6 samples, about 6-10 batches are one epoch, I run 16 epochs if possible. </p>\n<p>In my case, inference could take slightly longer than the training part because my model has to generate tokens one by one. I did batch inference, which generates multiple answers in parallel.</p>\n<p>For training, the time is like this:<br>\nBatch count * transformer computation time * 4 (backpropagation overhead)</p>\n<p>For inference, the complexity is like this:<br>\nNumber of tokens (batch parallel does not count) * transformer computation time </p>\n<p>Your algorithm inference 96 times. Mine is at a similar level.</p>\n<p>How did you save the inference time? You did some excellent inference optimization!</p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3044133,
              "author_name": "Guillermo Barbadillo",
              "author_url": "",
              "post_date": "2024-11-13T04:33:26.867000",
              "content": "<p>My only trick to speedup inference is to use VLLM. From previous competitions, I have observed that is much faster than doing inference with the transformers library.</p>",
              "votes": 0,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3043046,
      "author_name": "Olayinka",
      "author_url": "",
      "post_date": "2024-11-12T03:36:44.913000",
      "content": "<p>The paper is written with great skill. Congratulations on your 3rd place my friend.</p>",
      "votes": 2,
      "replies": []
    },
    {
      "id": 3042757,
      "author_name": "Richard Emslie",
      "author_url": "",
      "post_date": "2024-11-11T18:11:55.267000",
      "content": "<p>What a fantastic write up, especially those 50 work iterations!  Look forward to reading through them all.  Thank you and congrats! </p>",
      "votes": 2,
      "replies": []
    },
    {
      "id": 3042548,
      "author_name": "ivan",
      "author_url": "",
      "post_date": "2024-11-11T15:36:08.797000",
      "content": "<p>Great job! Running 2020 solution in background - excellent way to manage resources. I had no idea this could be done. Btw, why you didn't used ConceptARC dataset?</p>",
      "votes": 2,
      "replies": [
        {
          "id": 3042689,
          "author_name": "Guillermo Barbadillo",
          "author_url": "",
          "post_date": "2024-11-11T17:14:35.737000",
          "content": "<p>If I remember well, I tried it but didn't give any significative improvement.</p>",
          "votes": 1,
          "replies": [
            {
              "id": 3042716,
              "author_name": "Guillermo Barbadillo",
              "author_url": "",
              "post_date": "2024-11-11T17:40:18.250000",
              "content": "<p>Source: <a href=\"https://ironbar.github.io/arc24/modeling/Iteration_17_external_data/#what-is-the-best-data-for-training\" target=\"_blank\">https://ironbar.github.io/arc24/modeling/Iteration_17_external_data/#what-is-the-best-data-for-training</a></p>",
              "votes": 2,
              "replies": []
            },
            {
              "id": 3042721,
              "author_name": "ivan",
              "author_url": "",
              "post_date": "2024-11-11T17:47:38.763000",
              "content": "<p>Wow! I missed that you kept a diary for each iteration! Thanks</p>",
              "votes": 2,
              "replies": []
            },
            {
              "id": 3042906,
              "author_name": "",
              "author_url": "",
              "post_date": "2024-11-11T22:03:52.210000",
              "content": "<p>Congratulations on making it to the money final!  Your focus, your success, and your impeccable attention to detail are a joyful inspiration!</p>",
              "votes": 1,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3240165,
      "author_name": "",
      "author_url": "",
      "post_date": "2025-07-03T14:20:11.237000",
      "content": "",
      "votes": 0,
      "replies": []
    },
    {
      "id": 3206069,
      "author_name": "",
      "author_url": "",
      "post_date": "2025-05-20T19:27:55.110000",
      "content": "",
      "votes": 0,
      "replies": []
    },
    {
      "id": 3175696,
      "author_name": "",
      "author_url": "",
      "post_date": "2025-04-10T13:42:20.687000",
      "content": "",
      "votes": 0,
      "replies": []
    },
    {
      "id": 3042679,
      "author_name": "",
      "author_url": "",
      "post_date": "2024-11-11T17:03:31.517000",
      "content": "",
      "votes": 0,
      "replies": [
        {
          "id": 3042692,
          "author_name": "",
          "author_url": "",
          "post_date": "2024-11-11T17:19:07.560000",
          "content": "",
          "votes": 2,
          "replies": []
        }
      ]
    },
    {
      "id": 3049674,
      "author_name": "",
      "author_url": "",
      "post_date": "2024-11-19T12:05:56.100000",
      "content": "",
      "votes": 0,
      "replies": []
    },
    {
      "id": 3047458,
      "author_name": "",
      "author_url": "",
      "post_date": "2024-11-16T17:42:42.960000",
      "content": "",
      "votes": 1,
      "replies": []
    },
    {
      "id": 3044496,
      "author_name": "",
      "author_url": "",
      "post_date": "2024-11-13T13:17:32.683000",
      "content": "",
      "votes": 1,
      "replies": []
    },
    {
      "id": 3046439,
      "author_name": "",
      "author_url": "",
      "post_date": "2024-11-15T13:30:43.603000",
      "content": "",
      "votes": 0,
      "replies": []
    }
  ],
  "comment_count": 55,
  "messages": [
    {
      "id": 3042498,
      "postDate": "2024-11-11T15:04:54.093Z",
      "content": "<p>Any feedback to improve this post or the <a href=\"https://ironbar.github.io/arc24/05_Solution_Summary/\" target=\"_blank\">paper</a> is very welcome 👍!</p>\n<p>This post is almost a duplicate of the <a href=\"https://ironbar.github.io/arc24/05_Solution_Summary/\" target=\"_blank\">paper</a>, I would recommend to go to the <a href=\"https://ironbar.github.io/arc24/05_Solution_Summary/\" target=\"_blank\">paper</a> directly because it has better formatting.</p>\n<h2>TLDR</h2>\n<p>My solution is an implementation of the MindsAI team approach (test-time fine-tuning) that in addition to train the model to generate the test outputs (the original ARC task) it also trains the model to do other tasks such as learning the input distribution by generating new inputs.</p>\n<h2>Context</h2>\n<ul>\n<li><a href=\"https://www.kaggle.com/competitions/arc-prize-2024/overview\" target=\"_blank\">Business context</a></li>\n<li><a href=\"https://www.kaggle.com/competitions/arc-prize-2024/data\" target=\"_blank\">Data context</a></li>\n</ul>\n<h2>Motivation of my approach</h2>\n<p>In the <a href=\"https://arcprize.org/arc\" target=\"_blank\">ARC challenge</a> we have to learn a transformation rule given a few high-dimensional pairs of input and output images. The images can have a size of up to 30x30 pixels and each pixel can take 10 different colors. The images are not as complex as real world images, but nevertheless they are high dimensional data.</p>\n<h3>How can we learn from few high-dimensional examples?</h3>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F264656%2F1872ebd8b23eeb052b5d0de5a20a5c9a%2F1.png?generation=1731337058067434&amp;alt=media\" alt=\"\"></p>\n<p>To solve each ARC problem we have to find the <strong>right representation</strong> of the data. When humans solve the tasks, the biggest challenge is to find the <strong>right perspective</strong> to look at the problem. Once we have the right perspective of the data the ARC problems are trivial to solve.</p>\n<p>The right representation of the data allows to decrease the dimensionality of the data and makes possible to learn the transformation from very few examples.</p>\n<h3>How can we learn a good representation of the ARC problems?</h3>\n<p>If we train a model to do tasks that require a good representation of the data, it's likely that the model will internally develop the required representation.</p>\n<p>My insight was that we could use the ARC problems in many different ways to learn that representation, not just in the original proposed task that asks to generate the output for an image given a few input-output pairs.</p>\n<h3>Omni-ARC: Training a single model to do multiple ARC-related tasks</h3>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F264656%2F0cfb88d56cdfe4d4448745507699d961%2F2.png?generation=1731337090400140&amp;alt=media\" alt=\"\"></p>\n<ul>\n<li><code>examples + input -&gt; output</code>. The original task of the ARC dataset.</li>\n<li><code>inputs -&gt; input</code>. Generating new inputs requires to understand the distribution of the grids. It could also be done with the outputs, that should also follow some distribution.</li>\n<li><code>examples -&gt; code</code>. This is the approach used by Ryan Greenblat with GPT-4o</li>\n<li><code>code + input -&gt; output</code>. This is equivalent to the first task, but instead of giving examples as input, it gives the code definition of the problem.</li>\n<li><code>code -&gt; inputs</code>. Each input to a task follows some distribution, given a description of the<br>\ndistribution the model should be able to generate samples of that distribution.</li>\n<li><code>inputs -&gt; code</code>. We could also do the opposite task, given some inputs write code to generate that distribution.</li>\n<li><code>examples + input + output -&gt; is the output correct?</code>. It is possible to train the model to verify wether a proposed output is correct.</li>\n<li><code>examples + input + output options-&gt; select the correct output</code>. We can train a model to select the correct output between multiple options.</li>\n</ul>\n<p>All the listed tasks require that the model learns some useful representation of the ARC image. The idea behind the Omni-ARC approach is to train a single model to do all the tasks, with the expectation that a shared representation across all the tasks will generalize better than training the model to do a single task.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F264656%2Fd875023e376c6b32bfec4fcd9accdc46%2F3.png?generation=1731337101860834&amp;alt=media\" alt=\"\"></p>\n<p><em>Omni-ARC, a single model that does all the ARC-related tasks (and it has a very cool logo)</em></p>\n<h2>Overview of the Approach</h2>\n<p>The solution on a nutshell:</p>\n<ol>\n<li>Take <code>Qwen2.5-0.5B-Instruct</code> and fine-tune it on publicly available ARC datasets. The model was fine-tuned to:<ol>\n<li>generate the outputs for the test samples</li>\n<li>learn the inputs distribution and generate new inputs.</li></ol></li>\n<li>Do test-time fine-tuning with the private test data, only for the task of generating the test outputs.</li>\n<li>Inference with data augmentation, and voting to select the predictions</li>\n<li>Ensemble with the 2020 public solution</li>\n</ol>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F264656%2F6582e5414c30bcabeae4b4835b80a273%2F4.png?generation=1731337122415869&amp;alt=media\" alt=\"\"></p>\n<h3>Training</h3>\n<h4>Data</h4>\n<p>I used the following publicly available datasets for training:</p>\n<table>\n<thead>\n<tr>\n<th>dataset</th>\n<th>number of unique tasks</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><a href=\"https://www.kaggle.com/competitions/arc-prize-2024/data\" target=\"_blank\">original ARC dataset</a></td>\n<td>800</td>\n</tr>\n<tr>\n<td>Michael Hodel's <a href=\"https://github.com/michaelhodel/re-arc\" target=\"_blank\">RE-ARC dataset</a></td>\n<td>400</td>\n</tr>\n<tr>\n<td>Simon Strandgaard's <a href=\"https://github.com/neoneye/arc-dataset-collection/tree/main/dataset/PQA\" target=\"_blank\">PQA dataset</a></td>\n<td>7</td>\n</tr>\n<tr>\n<td>Simon Strandgaard's <a href=\"https://github.com/neoneye/arc-dataset-tama\" target=\"_blank\">Tama dataset</a></td>\n<td>50</td>\n</tr>\n<tr>\n<td><a href=\"https://github.com/ksb21ST/Mini-ARC\" target=\"_blank\">Mini-ARC</a></td>\n<td>149</td>\n</tr>\n<tr>\n<td><a href=\"https://www.kaggle.com/datasets/zaharch/arc-nosound-tasks\" target=\"_blank\">nosound's hand crafted ARC tasks</a></td>\n<td>9</td>\n</tr>\n<tr>\n<td><a href=\"https://www.kaggle.com/datasets/andypenrose/extra-arc-tasks-for-testing\" target=\"_blank\">Andy Penrose's tasks</a></td>\n<td>5</td>\n</tr>\n<tr>\n<td>TOTAL</td>\n<td>1420</td>\n</tr>\n</tbody>\n</table>\n<p>For all the datasets I trained the model to do two tasks:</p>\n<ul>\n<li><code>examples + input -&gt; output</code>. The original task of the ARC dataset.</li>\n<li><code>inputs -&gt; input</code>. Generating new inputs requires to understand the distribution of the grids. It could also be done with the outputs, that should also follow some distribution.</li>\n</ul>\n<p><a href=\"https://ironbar.github.io/arc24/05_Solution_Summary/#data\" target=\"_blank\">Examples of newly generated inputs</a></p>\n<h4>Data augmentation</h4>\n<p>For each problem the same data augmentation was applied to all the inputs and outputs. Data augmentation was a composition of the following augmentations:</p>\n<ul>\n<li>Rotations</li>\n<li>Flips</li>\n<li>Color changes</li>\n<li>Swap between train and test examples</li>\n</ul>\n<h4>Problem augmentation</h4>\n<p>In addition to the data augmentation I also did problem augmentation by applying a transformation only to the inputs or to the outputs. This transformation created new ARC problems by composing the original ARC transformation with randomly chosen new ones.</p>\n<p>These new transformations needed to be reversible, otherwise the new generated problems might not be solvable. I used the following additional transformations:</p>\n<ul>\n<li>Rotations and/or flips</li>\n<li>Padding the image</li>\n<li>Upscale</li>\n<li>Mirror</li>\n</ul>\n<p><a href=\"https://ironbar.github.io/arc24/05_Solution_Summary/#problem-augmentation\" target=\"_blank\">Examples of problem augmentation in the paper</a></p>\n<h4>Problem representation</h4>\n<p>I used a very simple text representation of the ARC grids as an input to the LLMs. The grid was enclosed on a Markdown code snippet, the shape was defined at the first line and each row was numbered.</p>\n<pre><code>```grid shape: x3\n \n \n \n```\n</code></pre>\n<h4>Training hyperparameters</h4>\n<p>The model was fine-tuned using LoRA. No significative improvement was found when doing full model fine-tuning and also on test-time fine-tuning it seemed to be beneficial to just fine-tune the already trained LoRA adapter instead of creating a fresh new adapter.</p>\n<ul>\n<li>Model: <code>Qwen2.5-0.5B-Instruct</code></li>\n<li>LoRA rank: 128</li>\n<li>Learning rate: 5e-5, with a linear schedule with warmup</li>\n<li>Batch size: 16</li>\n<li>Training steps: 2e5</li>\n<li>Max sequence length: 8196</li>\n<li>Trained on 2xA6000 GPUs</li>\n</ul>\n<p>I used huggingface's trl and accelerate libraries for the training.</p>\n<h3>Test-time fine-tuning</h3>\n<p>Fine-tuning a model on ARC tasks is not enough to do well on the private test set. By applying test-time fine-tuning we could improve the number of solved problems from 11 to 33 for one of the models that I trained along the challenge.</p>\n<p>This is my interpretation of the test-time fine-tuning:</p>\n<ul>\n<li>For each test problem that had <code>n</code> train samples, I fine-tuned the model using <code>n-1</code> train samples and using the remaining sample as a test sample. The selection of the test sample was done randomly on the fly during training.</li>\n<li>I used <a href=\"#data-augmentation\">data augmentation</a> just like in the previous training</li>\n<li>I fine-tuned a model for each of the test problems, so 100 fine-tuned models were generated on each submission.</li>\n<li>I used batch size 1 in the test-time fine-tuning to be able to learn the new problems as fast as possible.</li>\n<li>The model was fine-tuned for ~300 steps on each problem</li>\n<li>Suprisingly the best learning rate for test-time fine-tuning was 8e-5, higher than the one used for training (5e-5). It's very likely that better results could be obtained if more computation was available, training with a slower learning rate, with higher batch size and for longer.</li>\n</ul>\n<p>Due to the limited submission time test-time fine-tuning was only applied to the canonical ARC task of predicting the test outputs. But it could also be applied to the task of generating new inputs, or to the tasks of verifying the correctness of the outputs.</p>\n<p>The unusual configuration of training a single model for each task with batch size 1 arose due to the limitations of compute and submission time. It was the configuration that allowed to learn faster the new test problems.</p>\n<h3>Inference</h3>\n<p>Data augmentation was applied also at inference, and the data augmentation was reverted from the prediction to get the original output. 96 predictions were done for each problem and voting was used to select the most promising predictions. So just like MindsAI's AIRV (augment, inference, reverse augmentation, and vote).</p>\n<p>Inference was done using a temperature of 0.</p>\n<p>VLLM was used to generate the predictions. Each fine-tuned model was used to generate predictions for its problem.</p>\n<h3>Ensemble</h3>\n<p>I ensembled my model predictions with the <a href=\"https://www.kaggle.com/code/mehrankazeminia/3-arc24-developed-2020-winning-solutions\" target=\"_blank\">2020 solution</a>. Since the 2020 solution only requires CPU, I managed to run it on the background while I used the GPU for fine-tuning and inference with my model. I only had to be careful with the RAM usage because both jobs had to share the same memory.</p>\n<p>The ensemble strategy was very simple, just take the first attempt from each solution.</p>\n<h3>Results</h3>\n<p>This approach scored 40 on the ARC leaderboard.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F264656%2F6582e5414c30bcabeae4b4835b80a273%2F4.png?generation=1731337122415869&amp;alt=media\" alt=\"\"></p>\n<p>The same approach (without test-time fine-tuning) could solve 32% of the evaluation tasks, and when using voting with 32 predictions it achieved a top_2 accuracy of 22%. Due to limited hardware resources I didn't usually evaluated the models with test-time fine-tuning on the evaluation dataset. Kaggle provides 30 hours of GPU each week, but we could make 3 submissions a day which is equivalent to 36 hours of compute. Thus it was much cheaper to use the submissions to see the performance of the test-time fine-tuning where we had 7 times more compute available per week.</p>\n<h2>Details of the submission</h2>\n<h3>Prompting is not enough, test-time fine-tuning is needed</h3>\n<p>Clearly this competition has shown that LLMs need test-time fine-tuning to do new tasks. Few-shot prompting is not enough for the model to learn novel tasks.</p>\n<h3>It's possible to train the model to verify the correctness of the tasks</h3>\n<p>During the last weeks of the challenge I tried to continue with the Omni-ARC approach and train the model to:</p>\n<ol>\n<li>Verify if an output is correct</li>\n<li>Select the correct output between two options</li>\n</ol>\n<p>The idea was that we could improve the LB score if we replaced the voting selection mechanism by a more accurate one. Using trained models I generated wrong predictions for the original ARC dataset using a sampling temperature close to 1.</p>\n<table>\n<thead>\n<tr>\n<th>method</th>\n<th>top 1 accuracy</th>\n<th>top 2 accuracy</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>voting</td>\n<td>60.0%</td>\n<td>70.0%</td>\n</tr>\n<tr>\n<td>verification</td>\n<td>59.3%</td>\n<td>77.4%</td>\n</tr>\n<tr>\n<td>selection</td>\n<td><strong>68.7%</strong></td>\n<td><strong>81.0%</strong></td>\n</tr>\n</tbody>\n</table>\n<p>As the table above shows I was able to achieve promising results on the evaluation dataset. Those numbers are for 32 predictions.</p>\n<p>However I was not able to improve the LB score using this approach. My hypothesis is that the distribution of the predictions of a test-time fine-tuned model is different from the distribution of a frozen model. Thus the accuracy of voting for a test-time fine-tuned model might be much higher than the shown in the table for a frozen model.</p>\n<p>This verifier models could benefit from test-time fine-tuning, but I could not test the hypothesis due to the limited submission time.</p>\n<p>More information on <a href=\"https://ironbar.github.io/arc24/modeling/Iteration_47_select_instead_of_verify\" target=\"_blank\">Iteration 47</a> and <a href=\"https://ironbar.github.io/arc24/modeling/Iteration_45_improve_verifier\" target=\"_blank\">Iteration 45</a>.</p>\n<h3>Solving the tasks using code did not worked for me</h3>\n<p>I also tried to expand on the Omni-ARC approach by training the model to do the additional tasks:</p>\n<ul>\n<li><code>examples -&gt; code</code>. This is the approach used by Ryan Greenblat with GPT-4o</li>\n<li><code>code + input -&gt; output</code>. This is equivalent to the first task, but instead of giving examples as input, it gives the code definition of the problem.</li>\n</ul>\n<p>To do so I build a small domain specific language (DSL) and recreated 285 of the ARC training tasks with python code. This was a laborious process that took around 3 weeks.</p>\n<p>Unfortunately the model did not generalize well. It could only solve 5% of the evaluation tasks, and those tasks were very similar to the training tasks. On the private test set a lucky submission was able to solve 1 task.</p>\n<p>I believe this approach has great potential, but I had to change to other approaches because the end of the challenge was close and other teams were improving in the leaderboard.</p>\n<p>More info on <a href=\"https://ironbar.github.io/arc24/modeling/Iteration_26_dawn_of_omni_arc\" target=\"_blank\">Iteration 26</a>, <a href=\"https://ironbar.github.io/arc24/modeling/Iteration_40_try_coding_models\" target=\"_blank\">Iteration 40</a> and <a href=\"https://ironbar.github.io/arc24/modeling/Iteration_42_improve_omniarc\" target=\"_blank\">Iteration 42</a>.</p>\n<h3>The quality of the datasets is relevant</h3>\n<p>On the last weeks of the challenge I tried adding the <a href=\"https://huggingface.co/collections/barc0/synthetic-arc-dataset-6725aa6031376d3bacc34f76\" target=\"_blank\">BARC datasets</a> to the training data. Surprisingly despite the enormous claimed number of different tasks (400k) I did not see any significative improvement either on the evaluation dataset or in the leaderboard. More information on <a href=\"https://ironbar.github.io/arc24/modeling/Iteration_48_more_external_data\" target=\"_blank\">Iteration 48. More external data</a>.</p>\n<p>This is surprising because the original ARC dataset shows a clear trend when increasing the number of training tasks:</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F264656%2F52306f5322b2d0d43fabe1f752f44c7a%2F5.png?generation=1731337162581753&amp;alt=media\" alt=\"\"></p>\n<p>My guess is that the automatically generated tasks by GPT4 did not have too much novelty respect to the original ARC tasks.</p>\n<h3>The right model size</h3>\n<p><code>Qwen2.5-0.5B</code> was the right model size for my approach and the available compute for submission.</p>\n<p>On a first step I tried smaller models such as <code>SmolLM2-135M</code> and <code>NanoLM-0.3B</code> but they did not achieve the same accuracy as <code>Qwen2.5-0.5B</code>. More on <a href=\"https://ironbar.github.io/arc24/modeling/Iteration_46_revisit_small_llms\" target=\"_blank\">Iteration 46. Revisit small LLMs</a></p>\n<p>On my <a href=\"https://ironbar.github.io/arc24/modeling/Iteration_50_last_trainings\" target=\"_blank\">final attempt</a> I also tried bigger models such as <code>Qwen2.5-1.5B</code> and <code>Qwen2.5-7B</code>. These models exhibit a higher data efficiency, they reach a smaller training loss for the same amount<br>\nof training steps. The problem with these models is that they are slower to fine-tune and inference at submission. Moreover due to VRAM requirements we have to decrease the length of the training samples. It's very likely that LB score could be improved with this  bigger models if better hardware and more submission time is given.</p>\n<h2>Sources</h2>\n<ul>\n<li><a href=\"https://ironbar.github.io/arc24/\" target=\"_blank\">Documentation of all the work done during the challenge</a></li>\n<li><a href=\"https://github.com/ironbar/arc24\" target=\"_blank\">Github repo</a></li>\n<li><a href=\"https://www.kaggle.com/code/ironbar/single-task-test-time-fine-tuning-for-arc24?scriptVersionId=199282752\" target=\"_blank\">Submission notebook</a></li>\n<li><a href=\"https://notebooklm.google.com/notebook/cf13e950-4048-4ba6-a001-e3d03a577339/audio\" target=\"_blank\">NotebookLM of the solution</a></li>\n<li><a href=\"https://www.linkedin.com/in/guillermobarbadillo/\" target=\"_blank\">Linkedin profile</a></li>\n<li><a href=\"https://x.com/guille_bar\" target=\"_blank\">Twitter profile</a></li>\n</ul>\n<h2>Acknowledgments</h2>\n<ul>\n<li><a href=\"https://veridas.com/en/\" target=\"_blank\">Veridas</a> for providing me access to its compute cluster during all the challenge. Most of the experiments were done on Veridas cluster, using A6000 GPUs with 48GB of VRAM.</li>\n<li><a href=\"https://strongcompute.com/\" target=\"_blank\">Strong Compute</a> for providing compute for training the last models for the challenge. They gave me access to A100 GPUs with 80GB of VRAM, which allowed me to train bigger models.</li>\n<li><a href=\"https://huggingface.co/Qwen\" target=\"_blank\">Qwen</a> for training and releasing a family of very capable LLMs with many different sizes.</li>\n<li><a href=\"https://wandb.ai/home\" target=\"_blank\">Weigths and bias</a> I used it to track all the experiments in a single place. It's an amazing tool and free for individuals.</li>\n<li><a href=\"https://lambdalabs.com/\" target=\"_blank\">Lambdalabs</a>. I did some short (but expensive) experiments on the last week of the challenge in Lambdalabs. They provide me with some free credits that partially covered this experiments.</li>\n<li>ARC team. It's been a pleasure to work in this super interesting challenge for a few months. Thanks for creating the challenge and specially to Chollet for all his wisdom and teachings.</li>\n<li>Family. I couldn't have done all this work without the help of my wife and the appreciation from my children. My family followed my progress during the challenge and cheered me up when I advanced in the leaderboard.</li>\n</ul>",
      "rawMarkdown": "Any feedback to improve this post or the [paper](https://ironbar.github.io/arc24/05_Solution_Summary/) is very welcome 👍!\n\nThis post is almost a duplicate of the [paper](https://ironbar.github.io/arc24/05_Solution_Summary/), I would recommend to go to the [paper](https://ironbar.github.io/arc24/05_Solution_Summary/) directly because it has better formatting.\n\n## TLDR\n\nMy solution is an implementation of the MindsAI team approach (test-time fine-tuning) that in addition to train the model to generate the test outputs (the original ARC task) it also trains the model to do other tasks such as learning the input distribution by generating new inputs.\n\n## Context\n\n- [Business context](https://www.kaggle.com/competitions/arc-prize-2024/overview)\n- [Data context](https://www.kaggle.com/competitions/arc-prize-2024/data)\n\n## Motivation of my approach\n\nIn the [ARC challenge](https://arcprize.org/arc) we have to learn a transformation rule given a few high-dimensional pairs of input and output images. The images can have a size of up to 30x30 pixels and each pixel can take 10 different colors. The images are not as complex as real world images, but nevertheless they are high dimensional data.\n\n### How can we learn from few high-dimensional examples?\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F264656%2F1872ebd8b23eeb052b5d0de5a20a5c9a%2F1.png?generation=1731337058067434&alt=media)\n\nTo solve each ARC problem we have to find the **right representation** of the data. When humans solve the tasks, the biggest challenge is to find the **right perspective** to look at the problem. Once we have the right perspective of the data the ARC problems are trivial to solve.\n\nThe right representation of the data allows to decrease the dimensionality of the data and makes possible to learn the transformation from very few examples.\n\n### How can we learn a good representation of the ARC problems?\n\nIf we train a model to do tasks that require a good representation of the data, it's likely that the model will internally develop the required representation.\n\nMy insight was that we could use the ARC problems in many different ways to learn that representation, not just in the original proposed task that asks to generate the output for an image given a few input-output pairs.\n\n### Omni-ARC: Training a single model to do multiple ARC-related tasks\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F264656%2F0cfb88d56cdfe4d4448745507699d961%2F2.png?generation=1731337090400140&alt=media)\n\n- `examples + input -> output`. The original task of the ARC dataset.\n- `inputs -> input`. Generating new inputs requires to understand the distribution of the grids. It could also be done with the outputs, that should also follow some distribution.\n- `examples -> code`. This is the approach used by Ryan Greenblat with GPT-4o\n- `code + input -> output`. This is equivalent to the first task, but instead of giving examples as input, it gives the code definition of the problem.\n- `code -> inputs`. Each input to a task follows some distribution, given a description of the\n  distribution the model should be able to generate samples of that distribution.\n- `inputs -> code`. We could also do the opposite task, given some inputs write code to generate that distribution.\n- `examples + input + output -> is the output correct?`. It is possible to train the model to verify wether a proposed output is correct.\n- `examples + input + output options-> select the correct output`. We can train a model to select the correct output between multiple options.\n\nAll the listed tasks require that the model learns some useful representation of the ARC image. The idea behind the Omni-ARC approach is to train a single model to do all the tasks, with the expectation that a shared representation across all the tasks will generalize better than training the model to do a single task.\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F264656%2Fd875023e376c6b32bfec4fcd9accdc46%2F3.png?generation=1731337101860834&alt=media)\n\n_Omni-ARC, a single model that does all the ARC-related tasks (and it has a very cool logo)_\n\n## Overview of the Approach\n\nThe solution on a nutshell:\n\n1. Take `Qwen2.5-0.5B-Instruct` and fine-tune it on publicly available ARC datasets. The model was fine-tuned to:\n   1. generate the outputs for the test samples\n   2. learn the inputs distribution and generate new inputs.\n2. Do test-time fine-tuning with the private test data, only for the task of generating the test outputs.\n3. Inference with data augmentation, and voting to select the predictions\n4. Ensemble with the 2020 public solution\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F264656%2F6582e5414c30bcabeae4b4835b80a273%2F4.png?generation=1731337122415869&alt=media)\n\n### Training\n\n#### Data\n\nI used the following publicly available datasets for training:\n\n| dataset                                                                                                    | number of unique tasks |\n|------------------------------------------------------------------------------------------------------------|------------------------|\n| [original ARC dataset](https://www.kaggle.com/competitions/arc-prize-2024/data)                                     | 800                    |\n| Michael Hodel's [RE-ARC dataset](https://github.com/michaelhodel/re-arc)                                   | 400                    |\n| Simon Strandgaard's [PQA dataset](https://github.com/neoneye/arc-dataset-collection/tree/main/dataset/PQA) | 7                      |\n| Simon Strandgaard's [Tama dataset](https://github.com/neoneye/arc-dataset-tama)                            | 50                     |\n| [Mini-ARC](https://github.com/ksb21ST/Mini-ARC)                                                            | 149                    |\n| [nosound's hand crafted ARC tasks](https://www.kaggle.com/datasets/zaharch/arc-nosound-tasks)              | 9                      |\n| [Andy Penrose's tasks](https://www.kaggle.com/datasets/andypenrose/extra-arc-tasks-for-testing)            | 5                      |\n| TOTAL                                                                                                      | 1420                   |\n\nFor all the datasets I trained the model to do two tasks:\n\n- `examples + input -> output`. The original task of the ARC dataset.\n- `inputs -> input`. Generating new inputs requires to understand the distribution of the grids. It could also be done with the outputs, that should also follow some distribution.\n\n[Examples of newly generated inputs](https://ironbar.github.io/arc24/05_Solution_Summary/#data)\n\n#### Data augmentation\n\nFor each problem the same data augmentation was applied to all the inputs and outputs. Data augmentation was a composition of the following augmentations:\n\n- Rotations\n- Flips\n- Color changes\n- Swap between train and test examples\n\n#### Problem augmentation\n\nIn addition to the data augmentation I also did problem augmentation by applying a transformation only to the inputs or to the outputs. This transformation created new ARC problems by composing the original ARC transformation with randomly chosen new ones.\n\nThese new transformations needed to be reversible, otherwise the new generated problems might not be solvable. I used the following additional transformations:\n\n- Rotations and/or flips\n- Padding the image\n- Upscale\n- Mirror\n\n[Examples of problem augmentation in the paper](https://ironbar.github.io/arc24/05_Solution_Summary/#problem-augmentation)\n\n#### Problem representation\n\nI used a very simple text representation of the ARC grids as an input to the LLMs. The grid was enclosed on a Markdown code snippet, the shape was defined at the first line and each row was numbered.\n\n    ```grid shape: 3x3\n    1 100\n    2 010\n    3 001\n    ```\n\n#### Training hyperparameters\n\nThe model was fine-tuned using LoRA. No significative improvement was found when doing full model fine-tuning and also on test-time fine-tuning it seemed to be beneficial to just fine-tune the already trained LoRA adapter instead of creating a fresh new adapter.\n\n- Model: `Qwen2.5-0.5B-Instruct`\n- LoRA rank: 128\n- Learning rate: 5e-5, with a linear schedule with warmup\n- Batch size: 16\n- Training steps: 2e5\n- Max sequence length: 8196\n- Trained on 2xA6000 GPUs\n\nI used huggingface's trl and accelerate libraries for the training.\n\n### Test-time fine-tuning\n\nFine-tuning a model on ARC tasks is not enough to do well on the private test set. By applying test-time fine-tuning we could improve the number of solved problems from 11 to 33 for one of the models that I trained along the challenge.\n\nThis is my interpretation of the test-time fine-tuning:\n\n- For each test problem that had `n` train samples, I fine-tuned the model using `n-1` train samples and using the remaining sample as a test sample. The selection of the test sample was done randomly on the fly during training.\n- I used [data augmentation](#data-augmentation) just like in the previous training\n- I fine-tuned a model for each of the test problems, so 100 fine-tuned models were generated on each submission.\n- I used batch size 1 in the test-time fine-tuning to be able to learn the new problems as fast as possible.\n- The model was fine-tuned for ~300 steps on each problem\n- Suprisingly the best learning rate for test-time fine-tuning was 8e-5, higher than the one used for training (5e-5). It's very likely that better results could be obtained if more computation was available, training with a slower learning rate, with higher batch size and for longer.\n\nDue to the limited submission time test-time fine-tuning was only applied to the canonical ARC task of predicting the test outputs. But it could also be applied to the task of generating new inputs, or to the tasks of verifying the correctness of the outputs.\n\nThe unusual configuration of training a single model for each task with batch size 1 arose due to the limitations of compute and submission time. It was the configuration that allowed to learn faster the new test problems.\n\n### Inference\n\nData augmentation was applied also at inference, and the data augmentation was reverted from the prediction to get the original output. 96 predictions were done for each problem and voting was used to select the most promising predictions. So just like MindsAI's AIRV (augment, inference, reverse augmentation, and vote).\n\nInference was done using a temperature of 0.\n\nVLLM was used to generate the predictions. Each fine-tuned model was used to generate predictions for its problem.\n\n### Ensemble\n\nI ensembled my model predictions with the [2020 solution](https://www.kaggle.com/code/mehrankazeminia/3-arc24-developed-2020-winning-solutions). Since the 2020 solution only requires CPU, I managed to run it on the background while I used the GPU for fine-tuning and inference with my model. I only had to be careful with the RAM usage because both jobs had to share the same memory.\n\nThe ensemble strategy was very simple, just take the first attempt from each solution.\n\n### Results\n\nThis approach scored 40 on the ARC leaderboard.\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F264656%2F6582e5414c30bcabeae4b4835b80a273%2F4.png?generation=1731337122415869&alt=media)\n\nThe same approach (without test-time fine-tuning) could solve 32% of the evaluation tasks, and when using voting with 32 predictions it achieved a top_2 accuracy of 22%. Due to limited hardware resources I didn't usually evaluated the models with test-time fine-tuning on the evaluation dataset. Kaggle provides 30 hours of GPU each week, but we could make 3 submissions a day which is equivalent to 36 hours of compute. Thus it was much cheaper to use the submissions to see the performance of the test-time fine-tuning where we had 7 times more compute available per week.\n\n## Details of the submission\n\n### Prompting is not enough, test-time fine-tuning is needed\n\nClearly this competition has shown that LLMs need test-time fine-tuning to do new tasks. Few-shot prompting is not enough for the model to learn novel tasks.\n\n### It's possible to train the model to verify the correctness of the tasks\n\nDuring the last weeks of the challenge I tried to continue with the Omni-ARC approach and train the model to:\n\n1. Verify if an output is correct\n2. Select the correct output between two options\n\nThe idea was that we could improve the LB score if we replaced the voting selection mechanism by a more accurate one. Using trained models I generated wrong predictions for the original ARC dataset using a sampling temperature close to 1.\n\n| method       | top 1 accuracy | top 2 accuracy |\n|--------------|----------------|----------------|\n| voting       | 60.0%          | 70.0%          |\n| verification | 59.3%          | 77.4%          |\n| selection    | **68.7%**      | **81.0%**      |\n\nAs the table above shows I was able to achieve promising results on the evaluation dataset. Those numbers are for 32 predictions.\n\nHowever I was not able to improve the LB score using this approach. My hypothesis is that the distribution of the predictions of a test-time fine-tuned model is different from the distribution of a frozen model. Thus the accuracy of voting for a test-time fine-tuned model might be much higher than the shown in the table for a frozen model.\n\nThis verifier models could benefit from test-time fine-tuning, but I could not test the hypothesis due to the limited submission time.\n\nMore information on [Iteration 47](https://ironbar.github.io/arc24/modeling/Iteration_47_select_instead_of_verify) and [Iteration 45](https://ironbar.github.io/arc24/modeling/Iteration_45_improve_verifier).\n\n### Solving the tasks using code did not worked for me\n\nI also tried to expand on the Omni-ARC approach by training the model to do the additional tasks:\n\n- `examples -> code`. This is the approach used by Ryan Greenblat with GPT-4o\n- `code + input -> output`. This is equivalent to the first task, but instead of giving examples as input, it gives the code definition of the problem.\n\nTo do so I build a small domain specific language (DSL) and recreated 285 of the ARC training tasks with python code. This was a laborious process that took around 3 weeks.\n\nUnfortunately the model did not generalize well. It could only solve 5% of the evaluation tasks, and those tasks were very similar to the training tasks. On the private test set a lucky submission was able to solve 1 task.\n\nI believe this approach has great potential, but I had to change to other approaches because the end of the challenge was close and other teams were improving in the leaderboard.\n\nMore info on [Iteration 26](https://ironbar.github.io/arc24/modeling/Iteration_26_dawn_of_omni_arc), [Iteration 40](https://ironbar.github.io/arc24/modeling/Iteration_40_try_coding_models) and [Iteration 42](https://ironbar.github.io/arc24/modeling/Iteration_42_improve_omniarc).\n\n### The quality of the datasets is relevant\n\nOn the last weeks of the challenge I tried adding the [BARC datasets](https://huggingface.co/collections/barc0/synthetic-arc-dataset-6725aa6031376d3bacc34f76) to the training data. Surprisingly despite the enormous claimed number of different tasks (400k) I did not see any significative improvement either on the evaluation dataset or in the leaderboard. More information on [Iteration 48. More external data](https://ironbar.github.io/arc24/modeling/Iteration_48_more_external_data).\n\nThis is surprising because the original ARC dataset shows a clear trend when increasing the number of training tasks:\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F264656%2F52306f5322b2d0d43fabe1f752f44c7a%2F5.png?generation=1731337162581753&alt=media)\n\nMy guess is that the automatically generated tasks by GPT4 did not have too much novelty respect to the original ARC tasks.\n\n### The right model size\n\n`Qwen2.5-0.5B` was the right model size for my approach and the available compute for submission.\n\nOn a first step I tried smaller models such as `SmolLM2-135M` and `NanoLM-0.3B` but they did not achieve the same accuracy as `Qwen2.5-0.5B`. More on [Iteration 46. Revisit small LLMs](https://ironbar.github.io/arc24/modeling/Iteration_46_revisit_small_llms)\n\nOn my [final attempt](https://ironbar.github.io/arc24/modeling/Iteration_50_last_trainings) I also tried bigger models such as `Qwen2.5-1.5B` and `Qwen2.5-7B`. These models exhibit a higher data efficiency, they reach a smaller training loss for the same amount\nof training steps. The problem with these models is that they are slower to fine-tune and inference at submission. Moreover due to VRAM requirements we have to decrease the length of the training samples. It's very likely that LB score could be improved with this  bigger models if better hardware and more submission time is given.\n\n## Sources\n\n- [Documentation of all the work done during the challenge](https://ironbar.github.io/arc24/)\n- [Github repo](https://github.com/ironbar/arc24)\n- [Submission notebook](https://www.kaggle.com/code/ironbar/single-task-test-time-fine-tuning-for-arc24?scriptVersionId=199282752)\n- [NotebookLM of the solution](https://notebooklm.google.com/notebook/cf13e950-4048-4ba6-a001-e3d03a577339/audio)\n- [Linkedin profile](https://www.linkedin.com/in/guillermobarbadillo/)\n- [Twitter profile](https://x.com/guille_bar)\n\n## Acknowledgments\n\n- [Veridas](https://veridas.com/en/) for providing me access to its compute cluster during all the challenge. Most of the experiments were done on Veridas cluster, using A6000 GPUs with 48GB of VRAM.\n- [Strong Compute](https://strongcompute.com/) for providing compute for training the last models for the challenge. They gave me access to A100 GPUs with 80GB of VRAM, which allowed me to train bigger models.\n- [Qwen](https://huggingface.co/Qwen) for training and releasing a family of very capable LLMs with many different sizes.\n- [Weigths and bias](https://wandb.ai/home) I used it to track all the experiments in a single place. It's an amazing tool and free for individuals.\n- [Lambdalabs](https://lambdalabs.com/). I did some short (but expensive) experiments on the last week of the challenge in Lambdalabs. They provide me with some free credits that partially covered this experiments.\n- ARC team. It's been a pleasure to work in this super interesting challenge for a few months. Thanks for creating the challenge and specially to Chollet for all his wisdom and teachings.\n- Family. I couldn't have done all this work without the help of my wife and the appreciation from my children. My family followed my progress during the challenge and cheered me up when I advanced in the leaderboard.\n",
      "votes": 177
    },
    {
      "id": 3161975,
      "postDate": "2025-03-28T17:03:05.360Z",
      "content": "<p>So many fascinating ideas - well done! By teaching the model through code, you’re guiding it to reason more effectively and become \"transductive\", capable of generating numerous correct solutions. It’s remarkable how much a relatively small model can accomplish!  👏</p>",
      "rawMarkdown": "So many fascinating ideas - well done! By teaching the model through code, you’re guiding it to reason more effectively and become \"transductive\", capable of generating numerous correct solutions. It’s remarkable how much a relatively small model can accomplish!  👏",
      "votes": 2,
      "replies": [
        {
          "id": 3162091,
          "postDate": "2025-03-28T19:37:11.190Z",
          "content": "<p>Algorithm on monotonic sequencing, can be found <a href=\"https://drive.google.com/file/d/1EHsfGPonE_enXndZaaDQx4O18InP49dD/view?usp=sharing&amp;usp=embed_facebook\" target=\"_blank\">here</a>. It is a new form of model code extraction latest upgrades will be released soon.</p>",
          "rawMarkdown": "Algorithm on monotonic sequencing, can be found [here](https://drive.google.com/file/d/1EHsfGPonE_enXndZaaDQx4O18InP49dD/view?usp=sharing&usp=embed_facebook). It is a new form of model code extraction latest upgrades will be released soon.",
          "votes": 1
        }
      ]
    },
    {
      "id": 3048847,
      "postDate": "2024-11-18T12:13:08.330Z",
      "content": "<p>Congrats <a href=\"https://www.kaggle.com/ironbar\" target=\"_blank\">@ironbar</a> . The summary of the job you have done is amazing, I liked reading it a lot.</p>",
      "rawMarkdown": "Congrats @ironbar . The summary of the job you have done is amazing, I liked reading it a lot.",
      "votes": 3
    },
    {
      "id": 3048026,
      "postDate": "2024-11-17T13:22:11.710Z",
      "content": "<p>Amazing work, thanks for sharing everything!</p>",
      "rawMarkdown": "Amazing work, thanks for sharing everything!",
      "votes": 3
    },
    {
      "id": 3042556,
      "postDate": "2024-11-11T15:39:35.883Z",
      "content": "<p>Great writeup/paper. Congrats on the result.</p>",
      "rawMarkdown": "Great writeup/paper. Congrats on the result.",
      "votes": 2
    },
    {
      "id": 3065320,
      "postDate": "2024-12-06T17:18:42.370Z",
      "content": "<p>The MindsAI team disappeared from lb. You are 2nd place now. Congrats!</p>",
      "rawMarkdown": "The MindsAI team disappeared from lb. You are 2nd place now. Congrats!",
      "votes": 1,
      "replies": [
        {
          "id": 3065420,
          "postDate": "2024-12-06T19:18:50.760Z",
          "content": "<p>\"c-click!\" that was easy!  (congrats, irregardlessly!)</p>",
          "rawMarkdown": "\"c-click!\" that was easy!  (congrats, irregardlessly!)",
          "isDeleted": true
        },
        {
          "id": 3065633,
          "postDate": "2024-12-07T04:56:24.453Z",
          "content": "<p>Thanks, updating the title to avoid confusions.</p>",
          "rawMarkdown": "Thanks, updating the title to avoid confusions."
        }
      ]
    },
    {
      "id": 3056607,
      "postDate": "2024-11-27T07:01:44.717Z",
      "content": "<p>Congratulations and well done!</p>",
      "rawMarkdown": "Congratulations and well done!",
      "votes": 1
    },
    {
      "id": 3055633,
      "postDate": "2024-11-25T23:59:58.727Z",
      "content": "<p>Congratulations <a href=\"https://www.kaggle.com/ironbar\" target=\"_blank\">@ironbar</a> - excellent summary and all your hard work has paid off.  Hope you continue to improve your solution.</p>",
      "rawMarkdown": "Congratulations @ironbar - excellent summary and all your hard work has paid off.  Hope you continue to improve your solution.",
      "votes": 1
    },
    {
      "id": 3049345,
      "postDate": "2024-11-19T02:05:42.647Z",
      "content": "<p>very cool!!</p>",
      "rawMarkdown": "very cool!!",
      "votes": 1
    },
    {
      "id": 3046684,
      "postDate": "2024-11-15T18:22:56.820Z",
      "content": "<p>nicely done!</p>",
      "rawMarkdown": "nicely done!",
      "votes": 1
    },
    {
      "id": 3046020,
      "postDate": "2024-11-15T04:21:47.067Z",
      "content": "<p>Congratulations! This approach is new to me. I wonder if there is some basic theoretical information to get me started?</p>",
      "rawMarkdown": "Congratulations! This approach is new to me. I wonder if there is some basic theoretical information to get me started?",
      "votes": 1,
      "replies": [
        {
          "id": 3047068,
          "postDate": "2024-11-16T08:04:26.537Z",
          "content": "<p>I don't understand your question, could you elaborate more?</p>",
          "rawMarkdown": "I don't understand your question, could you elaborate more?",
          "votes": 1,
          "replies": [
            {
              "id": 3065369,
              "postDate": "2024-12-06T17:59:55.447Z",
              "content": "<p>Congratulations again on your progress to 2nd place, and for accepting public scrutiny… I'm interested in your strategy in assembling solutions and you give more information in the attached paper. I wonder what would happen if you took a second attempt. What's the difference from the first attempt?</p>\n<p>Have a nice day!</p>",
              "rawMarkdown": "Congratulations again on your progress to 2nd place, and for accepting public scrutiny... I'm interested in your strategy in assembling solutions and you give more information in the attached paper. I wonder what would happen if you took a second attempt. What's the difference from the first attempt?\n\nHave a nice day!"
            }
          ]
        }
      ]
    },
    {
      "id": 3045091,
      "postDate": "2024-11-14T06:44:43.197Z",
      "content": "<p>Excellent approach, got to learn a lot from this.</p>",
      "rawMarkdown": "Excellent approach, got to learn a lot from this.",
      "votes": 1
    },
    {
      "id": 3044491,
      "postDate": "2024-11-13T13:10:22.457Z",
      "content": "<p>Excellent work! There is so much to learn here.</p>",
      "rawMarkdown": "Excellent work! There is so much to learn here.",
      "votes": 1
    },
    {
      "id": 3044219,
      "postDate": "2024-11-13T06:56:21.037Z",
      "content": "<p>Many Congratulation! on your position.</p>",
      "rawMarkdown": "Many Congratulation! on your position.",
      "votes": 1
    },
    {
      "id": 3044036,
      "postDate": "2024-11-12T23:32:45.213Z",
      "content": "<p>Great work ! And congrats with the 3rd place ! 💪</p>",
      "rawMarkdown": "Great work ! And congrats with the 3rd place ! 💪",
      "votes": 1
    },
    {
      "id": 3043968,
      "postDate": "2024-11-12T21:22:50.870Z",
      "content": "<p>What an amazing write-up, thanks for the paper as well. 🥳</p>",
      "rawMarkdown": "What an amazing write-up, thanks for the paper as well. 🥳",
      "votes": 1
    },
    {
      "id": 3043760,
      "postDate": "2024-11-12T16:54:36.827Z",
      "content": "<p>Impressive work! Thank you for sharing your approach, and congratulations on 3rd place!</p>",
      "rawMarkdown": "Impressive work! Thank you for sharing your approach, and congratulations on 3rd place!",
      "votes": 1
    },
    {
      "id": 3043190,
      "postDate": "2024-11-12T06:35:18.980Z",
      "content": "<p>Congratulations on your 3rd leaderboard.</p>",
      "rawMarkdown": "Congratulations on your 3rd leaderboard.",
      "votes": 1
    },
    {
      "id": 3043151,
      "postDate": "2024-11-12T05:54:58.813Z",
      "content": "<p>Congrats on your 3rd place!  great work!</p>",
      "rawMarkdown": "Congrats on your 3rd place!  great work!",
      "votes": 1
    },
    {
      "id": 3043132,
      "postDate": "2024-11-12T05:40:17.003Z",
      "content": "<p>I'm updating the title to 3rd position because that is the new leaderboard standing and to avoid confusions with <a href=\"https://www.kaggle.com/alijs1\" target=\"_blank\">@alijs1</a> write up.</p>",
      "rawMarkdown": "I'm updating the title to 3rd position because that is the new leaderboard standing and to avoid confusions with @alijs1 write up.",
      "votes": 1
    },
    {
      "id": 3043068,
      "postDate": "2024-11-12T04:29:29.010Z",
      "content": "<p>Great work, fantastic omni-arc 🔥</p>",
      "rawMarkdown": "Great work, fantastic omni-arc 🔥",
      "votes": 1
    },
    {
      "id": 3042656,
      "postDate": "2024-11-11T16:45:21Z",
      "content": "<p>Awesome solution. Congratulations for your 4st place.</p>\n<p>I have failed in my attempts to fintune LLM for ARC. Honestly, your approach is much more novel compared to my part.</p>",
      "rawMarkdown": "Awesome solution. Congratulations for your 4st place.\n\nI have failed in my attempts to fintune LLM for ARC. Honestly, your approach is much more novel compared to my part.",
      "votes": 1
    },
    {
      "id": 3048065,
      "postDate": "2024-11-17T14:16:13.817Z",
      "content": "<p>Congratulations Bro. I love the way of your logical thinking that the path you make to execute this process.</p>",
      "rawMarkdown": "Congratulations Bro. I love the way of your logical thinking that the path you make to execute this process.",
      "votes": 2
    },
    {
      "id": 3044428,
      "postDate": "2024-11-13T12:03:05.343Z",
      "content": "<p>Amazing work!! Thank you for the detailed write up. So much to dig into. </p>",
      "rawMarkdown": "Amazing work!! Thank you for the detailed write up. So much to dig into. ",
      "votes": 2
    },
    {
      "id": 3044285,
      "postDate": "2024-11-13T08:16:04.850Z",
      "content": "<p>Great work! So many things to learn here.</p>\n<p>One question: I am intrigued by the fact that you are fine-tuning a separate model for every test task. Is the intuition that too many different types of test tasks confuse the model? In that case, can we really talk about \"general\" AI here?</p>",
      "rawMarkdown": "Great work! So many things to learn here.\n\nOne question: I am intrigued by the fact that you are fine-tuning a separate model for every test task. Is the intuition that too many different types of test tasks confuse the model? In that case, can we really talk about \"general\" AI here?",
      "votes": 2,
      "replies": [
        {
          "id": 3044313,
          "postDate": "2024-11-13T08:48:10.970Z",
          "content": "<p>It simply gave better results. </p>\n<p>My intuition is that since all the test problems are unique, it is not helpful to fine-tune the model to do all the test problems. Furthermore, the different problems could be contradictory and confusing.</p>\n<p>Bear in mind that submission time is limited, and we have to use it as best as possible. It is very likely that without time constraints, a single model could learn to do all the test problems as well as the current solution. </p>",
          "rawMarkdown": "It simply gave better results. \n\nMy intuition is that since all the test problems are unique, it is not helpful to fine-tune the model to do all the test problems. Furthermore, the different problems could be contradictory and confusing.\n\nBear in mind that submission time is limited, and we have to use it as best as possible. It is very likely that without time constraints, a single model could learn to do all the test problems as well as the current solution. ",
          "votes": 5,
          "replies": [
            {
              "id": 3044408,
              "postDate": "2024-11-13T11:24:32.510Z",
              "content": "<p>Makes sense, thank you.</p>",
              "rawMarkdown": "Makes sense, thank you.",
              "votes": 1
            }
          ]
        }
      ]
    },
    {
      "id": 3043187,
      "postDate": "2024-11-12T06:33:17.253Z",
      "content": "<p>The paper is written with great effort,<br>\nSO Insightfull ,<br>\nCongratulations on your 3rd place omni-arc.</p>",
      "rawMarkdown": "The paper is written with great effort,\nSO Insightfull ,\nCongratulations on your 3rd place omni-arc.\n\n\n",
      "votes": 2
    },
    {
      "id": 3043184,
      "postDate": "2024-11-12T06:29:40.083Z",
      "content": "<p>Can you share some performance data in terms of the speed on kaggle? Assuming you used T4x2.</p>\n<p>How long does test time learning take for each epoch, how many epochs, how long does token generations take and the batch size? It has to be for a specific task.</p>\n<p>I started the competition in the last month, did not have time to train a larger model or larger context window. Mine has 160M parameters and trained with around 2500 tokens. So I am curious about your numbers and I’d like to change my model and context window.</p>\n<p>I can share mine to compare.</p>",
      "rawMarkdown": "Can you share some performance data in terms of the speed on kaggle? Assuming you used T4x2.\n\nHow long does test time learning take for each epoch, how many epochs, how long does token generations take and the batch size? It has to be for a specific task.\n\nI started the competition in the last month, did not have time to train a larger model or larger context window. Mine has 160M parameters and trained with around 2500 tokens. So I am curious about your numbers and I’d like to change my model and context window.\n\nI can share mine to compare.",
      "votes": 2,
      "replies": [
        {
          "id": 3043204,
          "postDate": "2024-11-12T07:03:39.163Z",
          "content": "<p>Test-time fine-tuning uses almost all the time of the submission. Let's assume that 10 hours are used for test-time fine-tuning. So that is 360 seconds per problem. I trained for around 320 steps, so that would roughly be 1 step per second on average. The batch size is 1. Regarding model size, the LoRA adapter has around 17M parameters.</p>",
          "rawMarkdown": "Test-time fine-tuning uses almost all the time of the submission. Let's assume that 10 hours are used for test-time fine-tuning. So that is 360 seconds per problem. I trained for around 320 steps, so that would roughly be 1 step per second on average. The batch size is 1. Regarding model size, the LoRA adapter has around 17M parameters.",
          "votes": 1,
          "replies": [
            {
              "id": 3043229,
              "postDate": "2024-11-12T07:55:46.450Z",
              "content": "<p>Interesting approach with the even distribution of training time. Have you considered allocating the training time dynamically across problems? Since ARC problems vary significantly in complexity, some might benefit from more than 320 steps while others might converge much earlier. You might be able to improve beyond 40% accuracy by implementing early stopping on simpler problems and reallocating that compute to more complex ones that need additional training steps. This could potentially give you more efficient use of the 10-hour training budget. What metrics would you use to determine which problems deserve more training time? Thanks for the article! 🥰</p>",
              "rawMarkdown": "Interesting approach with the even distribution of training time. Have you considered allocating the training time dynamically across problems? Since ARC problems vary significantly in complexity, some might benefit from more than 320 steps while others might converge much earlier. You might be able to improve beyond 40% accuracy by implementing early stopping on simpler problems and reallocating that compute to more complex ones that need additional training steps. This could potentially give you more efficient use of the 10-hour training budget. What metrics would you use to determine which problems deserve more training time? Thanks for the article! 🥰",
              "votes": 3
            },
            {
              "id": 3043290,
              "postDate": "2024-11-12T09:39:56.067Z",
              "content": "<p>Yes, that is something totally worth exploring. I had that idea in the middle of the challenge, but some quick experiment did not show a clear relation between training loss and the accuracy of inference. </p>\n<p>I should have devoted more time exploring that direction and optimizing the test-time fine-tuning configuration.</p>",
              "rawMarkdown": "Yes, that is something totally worth exploring. I had that idea in the middle of the challenge, but some quick experiment did not show a clear relation between training loss and the accuracy of inference. \n\nI should have devoted more time exploring that direction and optimizing the test-time fine-tuning configuration.",
              "votes": 2
            },
            {
              "id": 3044108,
              "postDate": "2024-11-13T03:30:17.670Z",
              "content": "<p>I did the experiment <a href=\"https://www.kaggle.com/guboken\" target=\"_blank\">@guboken</a> suggested - it did not help the private test score. I hypothesize that my model did not perform well on the very large tasks anyway.</p>\n<p>One of the tests:</p>\n<p>Sort by the challenge size. Start from easy ones.<br>\nAllocate budget based on the average remaining time (total time / remaining count) * factor</p>\n<p>I tested factor = 1 and factor = 1.5. no difference.</p>",
              "rawMarkdown": "I did the experiment @guboken suggested - it did not help the private test score. I hypothesize that my model did not perform well on the very large tasks anyway.\n\nOne of the tests:\n\nSort by the challenge size. Start from easy ones.\nAllocate budget based on the average remaining time (total time / remaining count) * factor\n\nI tested factor = 1 and factor = 1.5. no difference."
            },
            {
              "id": 3044111,
              "postDate": "2024-11-13T03:38:17.817Z",
              "content": "<p>320 steps are in the same magnitude as mine ( my total parameter size is smaller than yours, at 160M. Lora did not apply to my case, it is a start-from-scratch model )</p>\n<p>Our definition of steps might be different. Mine is batches, each batch has 1-6 samples, about 6-10 batches are one epoch, I run 16 epochs if possible. </p>\n<p>In my case, inference could take slightly longer than the training part because my model has to generate tokens one by one. I did batch inference, which generates multiple answers in parallel.</p>\n<p>For training, the time is like this:<br>\nBatch count * transformer computation time * 4 (backpropagation overhead)</p>\n<p>For inference, the complexity is like this:<br>\nNumber of tokens (batch parallel does not count) * transformer computation time </p>\n<p>Your algorithm inference 96 times. Mine is at a similar level.</p>\n<p>How did you save the inference time? You did some excellent inference optimization!</p>",
              "rawMarkdown": "320 steps are in the same magnitude as mine ( my total parameter size is smaller than yours, at 160M. Lora did not apply to my case, it is a start-from-scratch model )\n\nOur definition of steps might be different. Mine is batches, each batch has 1-6 samples, about 6-10 batches are one epoch, I run 16 epochs if possible. \n\nIn my case, inference could take slightly longer than the training part because my model has to generate tokens one by one. I did batch inference, which generates multiple answers in parallel.\n\nFor training, the time is like this:\nBatch count * transformer computation time * 4 (backpropagation overhead)\n\nFor inference, the complexity is like this:\nNumber of tokens (batch parallel does not count) * transformer computation time \n\nYour algorithm inference 96 times. Mine is at a similar level.\n\nHow did you save the inference time? You did some excellent inference optimization!"
            },
            {
              "id": 3044133,
              "postDate": "2024-11-13T04:33:26.867Z",
              "content": "<p>My only trick to speedup inference is to use VLLM. From previous competitions, I have observed that is much faster than doing inference with the transformers library.</p>",
              "rawMarkdown": "My only trick to speedup inference is to use VLLM. From previous competitions, I have observed that is much faster than doing inference with the transformers library."
            }
          ]
        }
      ]
    },
    {
      "id": 3043046,
      "postDate": "2024-11-12T03:36:44.913Z",
      "content": "<p>The paper is written with great skill. Congratulations on your 3rd place my friend.</p>",
      "rawMarkdown": "The paper is written with great skill. Congratulations on your 3rd place my friend.",
      "votes": 2
    },
    {
      "id": 3042757,
      "postDate": "2024-11-11T18:11:55.267Z",
      "content": "<p>What a fantastic write up, especially those 50 work iterations!  Look forward to reading through them all.  Thank you and congrats! </p>",
      "rawMarkdown": "What a fantastic write up, especially those 50 work iterations!  Look forward to reading through them all.  Thank you and congrats! ",
      "votes": 2
    },
    {
      "id": 3042548,
      "postDate": "2024-11-11T15:36:08.797Z",
      "content": "<p>Great job! Running 2020 solution in background - excellent way to manage resources. I had no idea this could be done. Btw, why you didn't used ConceptARC dataset?</p>",
      "rawMarkdown": "Great job! Running 2020 solution in background - excellent way to manage resources. I had no idea this could be done. Btw, why you didn't used ConceptARC dataset?",
      "votes": 2,
      "replies": [
        {
          "id": 3042689,
          "postDate": "2024-11-11T17:14:35.737Z",
          "content": "<p>If I remember well, I tried it but didn't give any significative improvement.</p>",
          "rawMarkdown": "If I remember well, I tried it but didn't give any significative improvement.",
          "votes": 1,
          "replies": [
            {
              "id": 3042716,
              "postDate": "2024-11-11T17:40:18.250Z",
              "content": "<p>Source: <a href=\"https://ironbar.github.io/arc24/modeling/Iteration_17_external_data/#what-is-the-best-data-for-training\" target=\"_blank\">https://ironbar.github.io/arc24/modeling/Iteration_17_external_data/#what-is-the-best-data-for-training</a></p>",
              "rawMarkdown": "Source: https://ironbar.github.io/arc24/modeling/Iteration_17_external_data/#what-is-the-best-data-for-training",
              "votes": 2
            },
            {
              "id": 3042721,
              "postDate": "2024-11-11T17:47:38.763Z",
              "content": "<p>Wow! I missed that you kept a diary for each iteration! Thanks</p>",
              "rawMarkdown": "Wow! I missed that you kept a diary for each iteration! Thanks",
              "votes": 2
            },
            {
              "id": 3042906,
              "postDate": "2024-11-11T22:03:52.210Z",
              "content": "<p>Congratulations on making it to the money final!  Your focus, your success, and your impeccable attention to detail are a joyful inspiration!</p>",
              "rawMarkdown": "Congratulations on making it to the money final!  Your focus, your success, and your impeccable attention to detail are a joyful inspiration!",
              "votes": 1,
              "isDeleted": true
            }
          ]
        }
      ]
    },
    {
      "id": 3240165,
      "postDate": "2025-07-03T14:20:11.237Z",
      "content": "<p>I wonder why it‘s called Omni-ARC?</p>",
      "rawMarkdown": "I wonder why it‘s called Omni-ARC?"
    },
    {
      "id": 3206069,
      "postDate": "2025-05-20T19:27:55.110Z",
      "content": "<p>Congratulations! merci</p>",
      "rawMarkdown": "Congratulations! merci"
    },
    {
      "id": 3175696,
      "postDate": "2025-04-10T13:42:20.687Z",
      "content": "<p>congratulations, neat explanations.</p>",
      "rawMarkdown": "congratulations, neat explanations."
    },
    {
      "id": 3042679,
      "postDate": "2024-11-11T17:03:31.517Z",
      "content": "<p>Congrats on your achievement! And thanks for sharing all the details. I'm just curious as a GPU poor, what could be a way to access to no-cost computes if it was. I'm so desperate if there's any way. Appreciate if you could share.</p>",
      "rawMarkdown": "Congrats on your achievement! And thanks for sharing all the details. I'm just curious as a GPU poor, what could be a way to access to no-cost computes if it was. I'm so desperate if there's any way. Appreciate if you could share.",
      "replies": [
        {
          "id": 3042692,
          "postDate": "2024-11-11T17:19:07.560Z",
          "content": "<p>Some companies/organizations such as <a href=\"https://strongcompute.com/research-grants\" target=\"_blank\">StrongCompute</a> provide free compute if your project is interesting. I would search for compute grants, publish the work online, and maybe you are lucky to receive the free compute.</p>",
          "rawMarkdown": "Some companies/organizations such as [StrongCompute](https://strongcompute.com/research-grants) provide free compute if your project is interesting. I would search for compute grants, publish the work online, and maybe you are lucky to receive the free compute.",
          "votes": 2
        }
      ]
    },
    {
      "id": 3049674,
      "postDate": "2024-11-19T12:05:56.100Z",
      "rawMarkdown": "",
      "isDeleted": true
    },
    {
      "id": 3047458,
      "postDate": "2024-11-16T17:42:42.960Z",
      "rawMarkdown": "",
      "votes": 1,
      "isDeleted": true
    },
    {
      "id": 3044496,
      "postDate": "2024-11-13T13:17:32.683Z",
      "content": "<p>Great work!</p>",
      "rawMarkdown": "Great work!",
      "votes": 1
    },
    {
      "id": 3046439,
      "postDate": "2024-11-15T13:30:43.603Z",
      "rawMarkdown": "",
      "isDeleted": true
    }
  ],
  "complete": true,
  "source": "live",
  "fetched_at": "2026-10-19T22:21:40Z",
  "competition_id": 67357,
  "competition_slug": "arc-prize-2024",
  "team_id": 12243942,
  "solution_url": "/competitions/arc-prize-2024/writeups/guillermo-barbadillo-2nd-place-solution-for-the-ar"
}