Comment Cursor a entraîné Composer sur Fireworks : infrastructure distribuée pour le RL haute performance
You need all the infrastructure to run these environments that have to mimic as closely as possible what a user's computer would look like.
Il faut toute l'infrastructure pour faire tourner ces environnements qui doivent reproduire aussi fidèlement que possible ce à quoi ressemble l'ordinateur d'un utilisateur.
And it's very important as closely as possible because sometimes the model can actually figure out when it's being run in like a fake environment or not a real one and it has like different behaviors during RL than in production.
Et il est très important de reproduire cela aussi fidèlement que possible, parce que parfois le modèle peut en fait détecter qu'il est exécuté dans un environnement artificiel plutôt que réel, et il se comporte différemment pendant le RL qu'en production.
Are you saying it being conscious that it's being is in a fake environment and it starts being behaving differently?
Vous dites qu'il est conscient qu'il se trouve dans un environnement artificiel et qu'il commence à se comporter différemment ?
Yes.
Oui.
Yes.
Oui.
Interesting.
Intéressant.
Like it's like oh I'm in a fake environment.
Comme s'il se disait : je suis dans un faux environnement.
I've learned a few tricks to like get the better reward in this environment and let me try them out.
J'ai appris quelques astuces pour obtenir une meilleure récompense dans cet environnement, alors je vais les essayer.
Models love to cheat.
Les modèles adorent tricher.
RL is really good at encouraging cheating.
Le RL est vraiment doué pour encourager la triche.
I'm delighted to welcome Federico from Cursor and Dima from Fireworks to the podcast today.
J'ai le plaisir d'accueillir Federico de Cursor et Dima de Fireworks dans le podcast aujourd'hui.
Federico, you are the research lead on Composer 2 at Cursor, Cursor's new agentic coding model.
Federico, vous êtes le responsable de la recherche sur Composer 2 chez Cursor, le nouveau modèle de codage agentique de Cursor.
And Dima, you spent how many of the last few months moonlighting at Cursor in order to support all of the infrastructure required to make this gargantuan training task happen.
Et Dima, combien de mois avez-vous passé à travailler en parallèle chez Cursor pour soutenir toute l'infrastructure nécessaire à la réalisation de cette gigantesque tâche d'entraînement ?
And so, I'm excited to talk to both of you today about how the training of Composer 2 came together, what hard problems you solved together, and what you think it means for the future of of AI and foundation model companies.
Alors, je suis ravi de vous parler tous les deux aujourd'hui de la façon dont l'entraînement de Composer 2 s'est mis en place, des problèmes difficiles que vous avez résolus ensemble, et de ce que vous pensez que cela signifie pour l'avenir de l'IA et des entreprises de modèles de fondation.
Exciting.
Passionnant.
Yeah, exciting.
Ouais, passionnant.
Thank you for having us.
Merci de nous recevoir.
Thanks for joining.
Merci de nous rejoindre.
Okay, let's dive right in.
Bien, plongeons-y directement.
For those who haven't been following as closely, uh Cursor recently announced Composer 2, which is an agentic coding model uh meant for long horizon coding tasks.
Pour ceux qui n'ont pas suivi de près, Cursor a récemment annoncé Composer 2, un modèle de codage agentique conçu pour des tâches de codage à long horizon.
Federico, uh up till now, um Cursor was mostly uh enabling uh other people's uh coding agents.
Federico, jusqu'à présent, Cursor se concentrait principalement sur l'activation des agents de codage d'autres personnes.
Uh what was the impetus for Cursor to lean so heavily into Composer 2, and how existential is it for you to become not just an application company but also a foundation model company yourselves?
Quelle a été l'impulsion qui a poussé Cursor à s'investir autant dans Composer 2, et dans quelle mesure est-il existentiel pour vous de ne plus être seulement une entreprise applicative mais aussi une entreprise de modèles de fondation ?
The reason why we started looking into training our own models is you can sort of think about the model as sort of like like a storage drive.
La raison pour laquelle nous avons commencé à explorer l'entraînement de nos propres modèles, c'est qu'on peut concevoir le modèle un peu comme un disque de stockage.
It has certain amount of bits that it can store in its weights.
Il dispose d'une certaine quantité de bits qu'il peut stocker dans ses poids.
And the idea is very simple, you know, like we care about only one task.
Et l'idée est très simple : nous ne nous préoccupons que d'une seule tâche.
We don't even care about coding or programming necessarily.
On ne se préoccupe même pas nécessairement du codage ou de la programmation en général.
We care about software engineering inside cursor and inside cursor only.
Nous nous préoccupons de l'ingénierie logicielle dans Cursor et dans Cursor uniquement.
And so, what if we were to allocate all of the bits of information that can be stored inside the model weights to that one particular task?
Alors, que se passerait-il si nous allouions tous les bits d'information qui peuvent être stockés dans les poids du modèle à cette unique tâche particulière ?
Also, as people may have noticed, composer is order of magnitude less expensive than Opus and other like coding models because we can just simply specialize all of the model weights to that particular task.
De plus, comme certains l'ont peut-être remarqué, Composer est beaucoup moins cher qu'Opus et d'autres modèles de codage, car on peut simplement spécialiser tous les poids du modèle pour cette tâche particulière.
And so, we can serve like a smaller model or something of that sort, yeah.
Ainsi, on peut servir un modèle plus petit ou quelque chose dans ce genre, oui.
So, it's about let's make sure every single bit of weight or information we have is dedicated toward the specific problem that we have at hand.
Donc, il s'agit de s'assurer que chaque bit de poids ou d'information que l'on possède est dédié au problème spécifique que l'on a en main.
Exactly.
Exactement.
Got it.
Bien compris.
Um that seems like it's an almost generalizable problem.
Cela semble être un problème presque généralisable.
Uh Dima, I'm curious your perspective.
Dima, je suis curieux de connaître votre point de vue.
Do you think that every application company should be looking at cursor as a harbinger of what's to come?
Pensez-vous que chaque entreprise applicative devrait considérer Cursor comme un précurseur de ce qui va venir ?
Like should they all be looking to do the same thing?
Devraient-ils tous envisager de faire la même chose ?
Yeah, absolutely.
Oui, absolument.
I mean, we actually generally see it as a pattern of kind of evolution of the applications.
En fait, nous le voyons généralement comme un schéma d'évolution des applications.
You maybe start prototyping, you might be using kind of off-the-shelf model to get something running, maybe do some prompt engineering, figure out how your harness works.
On commence peut-être par prototyper, on utilise un modèle standard pour faire tourner quelque chose, on fait du prompt engineering, on comprend comment son harness fonctionne.
But the most kind of leveraged attribute of your application is the actual usage of user data or particular specific aspects of how this application works, maybe some aspects of your harness, which tools do you provide, how the application works, kind of really important bits which are important for your application.
Mais l'attribut le plus levier de votre application, c'est l'utilisation réelle des données utilisateurs ou des aspects particuliers du fonctionnement de cette application, peut-être certains aspects de votre harness, quels outils vous fournissez, comment l'application fonctionne, les éléments vraiment importants pour votre application.
And the right way to capture that, you can do a little bit of that through prompting, but really the right way to do this is craft your model to act in your environment.
Et la bonne façon de capturer cela, on peut en faire un peu via le prompting, mais vraiment la bonne approche consiste à façonner votre modèle pour qu'il agisse dans votre environnement.
Yeah, absolutely.
Oui, absolument.
Like there are certain tools the agent calls that it's very hard to succinctly describe exactly the behavior of that tool to the model.
Il y a certains outils que l'agent appelle et qu'il est très difficile de décrire succinctement au modèle.
And you know, with just like post-training, we can bake in the optimal way to use those tools.
Et avec le post-training, on peut intégrer la façon optimale d'utiliser ces outils.
Like Composer, we do serve a prompt to Composer, but I I think the way we are training it, it would work even without a prompt and it would know what to do just because like we are intrinsically pushing the model to like the right direction of how it should act throughout our training.
Par exemple, Composer, on lui sert bien un prompt, mais je pense que la façon dont on l'entraîne, il fonctionnerait même sans prompt et saurait quoi faire, simplement parce qu'on pousse intrinsèquement le modèle dans la bonne direction au cours de notre entraînement.
Basically, there's kind of like upper bound of like how far you can get with prompt engineering.
Il y a en quelque sorte une limite supérieure à ce qu'on peut obtenir avec le prompt engineering.
And if you want to uh craft really great AI products, you have to go through kind of fine-tuning and influence model behavior.
Et si l'on veut créer de très bons produits d'IA, il faut passer par le fine-tuning pour influencer le comportement du modèle.
That's kind of one reason.
C'est en quelque sorte la première raison.
I mean, reason number two is what Federico mentioned is kind of cost trade-off or XP trade-off.
La deuxième raison, comme Federico l'a mentionné, c'est le compromis coût-performance.
Like the way we kind of view it at Fireworks is that when you're trying to do optimization, you have this like three-dimensional trade-off between quality, speed, and cost.
La façon dont on voit les choses chez Fireworks, c'est que quand on cherche à optimiser, on a ce compromis tridimensionnel entre qualité, vitesse et coût.
And uh you can go quite far and we're doing it with all of our customers initially.
Et on peut aller assez loin, c'est ce qu'on fait avec tous nos clients au départ.
We can go quite far with just optimizing infrastructure, but when you start getting to model training, you can really push this trade-off much further and you can get better model at fraction of the cost running much faster.
On peut aller assez loin rien qu'en optimisant l'infrastructure, mais quand on commence à faire de l'entraînement de modèles, on peut vraiment pousser ce compromis beaucoup plus loin et obtenir un meilleur modèle à une fraction du coût, fonctionnant beaucoup plus rapidement.
And you know, Composer is a great example of
Et Composer en est un excellent exemple.
Can I push on this a little bit?
Puis-je insister un peu sur ce point ?
I want to ask you if this approach is better lesson pills.
Je veux vous demander si cette approche va à l'encontre de la leçon amère.
And we were we were actually all talking about TabNine on the walk-in.
D'ailleurs, on parlait tous de TabNine en arrivant.
I'm remembering before the LLM era, there were these like small specialized coding models.
Je me souviens qu'avant l'ère des LLM, il y avait ces petits modèles de codage spécialisés.
And one of the things that was I think surprising to to a lot of people was as you've scaled up, you know, you scaled up just training on the internet and a lot of a bunch of English text and other languages, actually the models themselves got inherently better at coding as well.
Et l'une des choses qui, je pense, a surpris beaucoup de gens, c'est qu'à mesure que vous avez mis à l'échelle, en entraînant simplement sur Internet et sur beaucoup de textes en anglais et dans d'autres langues, les modèles eux-mêmes sont devenus intrinsèquement meilleurs en codage également.
And so at least the trend line I've seen so far is just like bigger models perform better on everything including on coding.
Et donc, la tendance que j'ai vue jusqu'à présent, c'est que les modèles plus grands sont meilleurs pour tout, y compris pour le codage.
Is what you guys are saying, does that go against the grain of the better lesson?
Ce que vous dites va-t-il à l'encontre de la leçon amère ?
I think no, but one one sort of like thing to point out is that the big models trained by the labs train on a lot of code as well.
Je pense que non, mais il y a une chose à souligner : les grands modèles entraînés par les labos sont aussi entraînés sur beaucoup de code.
Like code is one of the main tasks the labs are interested in pushing and so they don't just generalize to it.
Le code est l'une des tâches principales sur lesquelles les labos cherchent à progresser, donc ils ne se contentent pas de généraliser.
They're a bit specialized as well.
Ils sont aussi un peu spécialisés.
I think for our case, actually, you know, if we believe about the bitter lesson, we are just pushing very hard on the data dimension, and we know that the models inherently have finite capacity.
Pour notre cas, en fait, si on croit en la leçon amère, on pousse très fort sur la dimension des données, et on sait que les modèles ont intrinsèquement une capacité finie.
And so, if we want to saturate all that capacity, we need to scale data.
Donc, si on veut saturer toute cette capacité, on doit mettre à l'échelle les données.
And in order to ingest more data, we we need to like free up the weights from distractions the model may have.
Et pour ingérer plus de données, on doit libérer les poids des distractions que le modèle pourrait avoir.
Mhm, okay.
Mmm, d'accord.
Got it.
Bien compris.
Super interesting.
Très intéressant.
Okay, let's dig into the training of Composer 2.
Bien, voyons de plus près l'entraînement de Composer 2.
You launched a couple weeks ago, immediately grabbed attention.
Lancé il y a quelques semaines et ça a immédiatement attiré l'attention.
Strong benchmark numbers, much lower cost to to run inference on.
De bons résultats sur les benchmarks, un coût d'inférence bien plus faible.
What's the short version of how Composer 2 works, and and what you guys did to make it so performant?
Quelle est la version courte de la façon dont Composer 2 fonctionne et de ce que vous avez fait pour le rendre si performant ?
We started from a very strong base, which is uh Kimmy 2.5.
Nous sommes partis d'une base très solide, à savoir Kimi 2.5.
It's like a 1 trillion and parameter MoE, that's 30 B active, so very very sparse, actually.
C'est un MoE de 1 000 milliards de paramètres avec 30 milliards actifs, donc très très sparse en réalité.
We sort of like looked at the stock and realized there are like two axes.
On a examiné l'état du modèle et on a réalisé qu'il y avait deux axes.
So, mainly Composer 1 was just pushing on one of these axes, which is reinforcement learning, but Composer 2 pushes in two different axes.
Composer 1 poussait principalement sur l'un de ces axes, le reinforcement learning, mais Composer 2 pousse sur deux axes différents.
One is continual pre-training, and the other is reinforcement learning.
L'un est le continual pre-training, et l'autre est le reinforcement learning.
So, the thing that made Composer 2 very good is pushing in both of these directions.
Ce qui a rendu Composer 2 vraiment bon, c'est de pousser dans ces deux directions.
So, we started off the training run by doing lots of mid-training on code tokens, almost sort of pre-training scale, actually.
Ainsi, on a commencé l'entraînement en faisant beaucoup de mid-training sur des tokens de code, presque à l'échelle du pré-entraînement, en réalité.
And then, coming out of that mid-training run, we took the checkpoints and we did very large-scale RL on lots of lots of tasks.
Puis, en sortant de ce mid-training, on a pris les checkpoints et on a fait du RL à très grande échelle sur de nombreuses tâches.
Okay, and then the premise here would be because Cursor sits in the middle of so many interesting coding tokens, you actually pretty uniquely have access to data to be able to train at almost pre-training scale.
D'accord, et la prémisse ici serait que, comme Cursor se trouve au centre de tant de tokens de codage intéressants, vous avez en réalité un accès assez unique à des données pour pouvoir entraîner à presque l'échelle du pré-entraînement.
Yeah.
Oui.
Why not pre-train your own model, then?
Pourquoi ne pas pré-entraîner votre propre modèle, alors ?
We just think about our approach from top-down instead of bottom-up.
On pense notre approche de haut en bas plutôt que de bas en haut.
So, like, how do we get a model that's useful to users in the least time possible if we were to start from the bottom, sort of figure out how how we do pre-training and then scale it up to mid-training and then, okay, now we figured out mid-training, now we do reinforcement learning.
Alors, comment obtenir un modèle utile aux utilisateurs dans le moins de temps possible, si on partait du bas, à comprendre comment faire le pré-entraînement, puis à le mettre à l'échelle jusqu'au mid-training, et ensuite, une fois le mid-training compris, passer au reinforcement learning ?
That would take a very long time to get a model out to our users.
Il faudrait très longtemps pour livrer un modèle à nos utilisateurs.
By doing it the other way around, we were able to give our useful model to our users in very little time.
En procédant à l'envers, on a pu donner un modèle utile à nos utilisateurs en très peu de temps.
So, hopefully, you know, like next Composer versions are going to be our own model instead of basing it off an open-source base.
Donc, on espère que les prochaines versions de Composer seront notre propre modèle plutôt que de reposer sur une base open source.
And what is the model roughly learning in the kind of mid-training step?
Et qu'est-ce que le modèle apprend approximativement lors du mid-training ?
And what is the model learning in the post-training step for you?
Et qu'apprend-il lors du post-training pour vous ?
Yeah, so in mid-training, it's sort of just kind of learning about libraries of code and learning about specific code patterns that are very common, like just world knowledge as well.
Oui, donc en mid-training, il apprend en quelque sorte des bibliothèques de code et des patterns de code spécifiques très courants, ainsi que des connaissances sur le monde en général.
There is like web data there as well.
Il y a aussi des données web.
And this is sort of just creating a wider distribution that then reinforcement learning can sharpen on.
Et cela crée en quelque sorte une distribution plus large sur laquelle le reinforcement learning peut ensuite se concentrer.
And so, during reinforcement learning, you know, the model gets to play directly with the cursor harness.
Donc, pendant le reinforcement learning, le modèle peut interagir directement avec le harness de Cursor.
And so, it gets to learn about the world the model is going to live in for the rest of its life, right?
Et il peut ainsi apprendre le monde dans lequel le modèle va vivre le reste de sa vie, en quelque sorte.
In in some way.
D'une certaine façon.
And and so, then during reinforcement learning, that's where it learns how to call tools properly, how to navigate its environment, how to write correct code.
Et c'est donc pendant le reinforcement learning qu'il apprend à appeler les outils correctement, à naviguer dans son environnement, à écrire du code correct.
Because during mid-training, it it learns how to write code.
Parce que pendant le mid-training, il apprend à écrire du code.