Estimate the compute-optimal model size from fixed-compute training sweeps. Each row gives parameter counts N and terminal losses at compute budget C. Its unweighted least-squares quadratic is defined over x=logN, using natural logarithms:
LC(x)=aCx2+bCx+cC.Here, LC is fitted loss, and aC, bC, cC are the fitted quadratic coefficients. Positive curvature and an interior minimum are guaranteed. The optimal log parameter count xC∗, parameter count NC, and token count DC satisfy:
xC∗=−2aCbC. NC=exC∗. DC=6NCC.The supplied compute model is six FLOPs per parameter per training token. The frontier is an unweighted least-squares line across all recovered optima:
logNC=logk+αlogC.Here, k is frontier scale and α is frontier exponent. Return a Python dictionary with optima, a budget-ordered list of dictionaries containing compute, parameters, tokens, loss as Python floats, plus frontier_scale and frontier_exponent as Python floats. Each loss is the quadratic's value at its fitted minimum.
Input: compute_budgets = [1000000,4000000], parameter_counts = [[250,500,2000,4000],[500,1000,4000,8000]], terminal_losses = [[1.5765436167,1.1441359042,1.1441359042,1.5765436167],[1.6765436167,1.2441359042,1.2441359042,1.6765436167]]
Output: {"optima":[{"compute":1000000,"parameters":1000,"tokens":166.666667,"loss":1},{"compute":4000000,"parameters":2000,"tokens":333.333333,"loss":1.1}],"frontier_scale":1,"frontier_exponent":0.5}
Explanation: The two quadratic vertices recover 1000 and 2000 parameters, which lie on the exact square-root compute frontier.
Input: compute_budgets = [10000,1000000,100000000], parameter_counts.shape = (3, 4), terminal_losses.shape = (3, 4)
Output: {"optima":[{"compute":10000,"parameters":100,"tokens":16.666667,"loss":1},{"compute":1000000,"parameters":1000,"tokens":166.666667,"loss":1.1},{"compute":100000000,"parameters":10000,"tokens":1666.666667,"loss":1.2}],"frontier_scale":1,"frontier_exponent":0.5}
Input: compute_budgets = [100000,1000000,10000000], parameter_counts.shape = (3, 4), terminal_losses.shape = (3, 4)
Output: {"optima":[{"compute":100000,"parameters":100,"tokens":166.666667,"loss":1},{"compute":1000000,"parameters":251.188644,"tokens":663.51195,"loss":1.1},{"compute":10000000,"parameters":630.957344,"tokens":2641.488655,"loss":1.2}],"frontier_scale":1,"frontier_exponent":0.4}
torch.log computes natural logarithms elementwise.
torch.stack combines feature vectors along a new axis.
torch.linalg.lstsq solves both quadratic and linear least-squares fits.
Accepts: array
Accepts: array
Accepts: array
Estimate the compute-optimal model size from fixed-compute training sweeps. Each row gives parameter counts N and terminal losses at compute budget C. Its unweighted least-squares quadratic is defined over x=logN, using natural logarithms:
LC(x)=aCx2+bCx+cC.Here, LC is fitted loss, and aC, bC, cC are the fitted quadratic coefficients. Positive curvature and an interior minimum are guaranteed. The optimal log parameter count xC∗, parameter count NC, and token count DC satisfy:
xC∗=−2aCbC. NC=exC∗. DC=6NCC.The supplied compute model is six FLOPs per parameter per training token. The frontier is an unweighted least-squares line across all recovered optima:
logNC=logk+αlogC.Here, k is frontier scale and α is frontier exponent. Return a Python dictionary with optima, a budget-ordered list of dictionaries containing compute, parameters, tokens, loss as Python floats, plus frontier_scale and frontier_exponent as Python floats. Each loss is the quadratic's value at its fitted minimum.
Input: compute_budgets = [1000000,4000000], parameter_counts = [[250,500,2000,4000],[500,1000,4000,8000]], terminal_losses = [[1.5765436167,1.1441359042,1.1441359042,1.5765436167],[1.6765436167,1.2441359042,1.2441359042,1.6765436167]]
Output: {"optima":[{"compute":1000000,"parameters":1000,"tokens":166.666667,"loss":1},{"compute":4000000,"parameters":2000,"tokens":333.333333,"loss":1.1}],"frontier_scale":1,"frontier_exponent":0.5}
Explanation: The two quadratic vertices recover 1000 and 2000 parameters, which lie on the exact square-root compute frontier.
Input: compute_budgets = [10000,1000000,100000000], parameter_counts.shape = (3, 4), terminal_losses.shape = (3, 4)
Output: {"optima":[{"compute":10000,"parameters":100,"tokens":16.666667,"loss":1},{"compute":1000000,"parameters":1000,"tokens":166.666667,"loss":1.1},{"compute":100000000,"parameters":10000,"tokens":1666.666667,"loss":1.2}],"frontier_scale":1,"frontier_exponent":0.5}
Input: compute_budgets = [100000,1000000,10000000], parameter_counts.shape = (3, 4), terminal_losses.shape = (3, 4)
Output: {"optima":[{"compute":100000,"parameters":100,"tokens":166.666667,"loss":1},{"compute":1000000,"parameters":251.188644,"tokens":663.51195,"loss":1.1},{"compute":10000000,"parameters":630.957344,"tokens":2641.488655,"loss":1.2}],"frontier_scale":1,"frontier_exponent":0.4}
torch.log computes natural logarithms elementwise.
torch.stack combines feature vectors along a new axis.
torch.linalg.lstsq solves both quadratic and linear least-squares fits.
Accepts: array
Accepts: array
Accepts: array