feat: add FFT trainer worker class#113
Merged
Merged
Conversation
droot
approved these changes
Jun 5, 2026
droot
left a comment
Collaborator
There was a problem hiding this comment.
This is great refactor! Thanks!
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR splits the existing trainer into the shape we need for full fine-tuning. The old trainer was really a LoRA worker because one process owns a base model and serves multiple jobs by creating and switching adapters. Full fine-tuning has a different ownership model where one worker process owns one trainable model for one job. To make that distinction explicit, this introduces a shared BaseTrainerWorker, keeps LoRA-specific adapter management in LoraTrainingWorker, and adds an FFTTrainingWorker for the single-model full fine-tuning path.
Most of the actual training math is shared between the two modes, so this also moves common forward/backward, padding, logprob, batching, and generation code into the base worker. The loss functions are factored into pure tensor operations in losses.py, which makes them easier to test directly and keeps the worker classes focused on model lifecycle and orchestration.
This PR does not wire full fine-tuning into the API server yet. It just adds the worker split and shared math needed for that follow-up.