machine studying successfully implies that merely coaching a mannequin is not sufficient; sturdy, automated, and reproducible coaching pipelines are quick changing into customary necessities in MLOps. Many groups wrestle to combine machine studying experimentation with production-grade CI/CD practices, usually changing into entangled in guide processes or advanced container configurations. What when you might streamline the containerization of your coaching workflows and orchestrate them with out ever needing to put in writing a Dockerfile?
On this tutorial, I’ll present easy methods to automate coaching a GPT-2 mannequin utilizing open-source Tekton pipelines and Buildpacks. We’ll containerize a coaching workflow with out writing a Dockerfile, and use Tekton to orchestrate the construct and coaching steps.
I’ll show this with a light-weight GPT-2 tuning instance, displaying the mannequin’s output earlier than versus after coaching, and supply step-by-step directions to recreate the pipeline.
Overview of the toolkit: Tekton, Buildpacks, and GPT-2
Tekton Pipelines: Cloud-Native CI/CD for ML
Tekton Pipelines is an open-source CI/CD framework that runs natively on Kubernetes. It permits you to outline pipelines as Kubernetes sources, enabling cloud-native construct, take a look at, and deploy workflows. In a Tekton pipeline, every step runs in a container, making it a great match for ML workflows that require isolation and reproducibility.
Buildpacks: skipping Dockerfiles
Keep in mind the final time you wrestled with a posh Dockerfile, making an attempt to get all dependencies and configurations good? Paketo Buildpacks (an implementation of Cloud Native Buildpacks) supply a refreshing different. They automate the creation of container photos immediately out of your supply code. Buildpacks analyze your venture, detect the language and dependencies, after which construct an optimized, safe container picture for you. This not solely saves time but in addition incorporates greatest practices into your image-building course of, usually leading to safer and environment friendly photos than these created manually with Dockerfiles.
GPT-2: light-weight mannequin
We’ll be utilizing GPT-2 as our instance mannequin. It’s a widely known transformer mannequin, and crucially, it’s light-weight sufficient for us to tune shortly on a small, customized dataset. This makes it excellent for demonstrating the mechanics of our coaching pipeline with out requiring large compute sources or hours of ready. We’ll tune it on a tiny set of question-answer pairs, permitting us to see a transparent distinction in its outputs after our pipeline works its magic.
The objective right here isn’t to attain groundbreaking NLP outcomes with GPT-2. As an alternative, we’re focusing squarely on showcasing an environment friendly and automatic CI/CD pipeline for mannequin coaching. The mannequin is our payload.
Peeking Contained in the Undertaking: Code, Knowledge, and Pipeline Construction
I’ve arrange an instance repository on GitHub that comprises every thing you’ll must comply with alongside. Let’s take a fast tour of the important thing parts:
training_process/practice.py
– the mannequin coaching script. It makes use of HuggingFace Transformers with PyTorch to fine-tune GPT-2 on a customized Q&A dataset. It reads a small textual content file of question-answer pairs (see under), fine-tunes GPT-2 on this knowledge, and saves the educated mannequin to an output listing.
training_process/necessities.txt
– Python dependencies wanted for coaching. Buildpacks will auto-install these into the picture.training_process/practice.txt
– A small dataset of Q&A pairs. Be at liberty to customise it 🙂untrained_model.py
– A helper script to check GPT-2 earlier than fine-tuning.
Tekton Pipeline Recordsdata:
model-training-pipeline.yaml
– defines the Tekton pipeline with two duties (defined within the subsequent part).source-pv-pvc.yaml
– defines a PersistentVolume and PersistentVolumeClaim for sharing the supply code and knowledge with the Tekton duties (used as a workspace).kind-config.yaml
– a Kind cluster configuration to mount the nativetraining_process/
listing into the Kubernetes cluster.sa.yml
– a ServiceAccount and secret configuration for pushing the constructed picture to a container registry (Docker Hub on this case).
With these items, we now have our code, knowledge, and pipeline definitions prepared. Now, let’s look at the construction of the Tekton pipeline.
Anatomy of Our Tekton Pipeline: Constructing and Coaching
At its core, a Tekton Pipeline useful resource is what orchestrates your CI/CD workflow by defining a collection of Duties. You’ll be able to consider these Duties as reusable constructing blocks, every composed of a number of Steps the place your precise instructions and scripts execute — all neatly packaged inside containers.
For our particular MLOps objective of automating the GPT-2 mannequin coaching, the Pipeline (outlined in model-training-pipeline.yaml
) is designed with a transparent, sequential construction. It’s going to execute two main Duties, one after the opposite: first, to construct and containerize our coaching code, and second, to run the coaching course of utilizing that recent container picture.
Let’s go over every intimately.
Construct The Picture: Containerize the Coaching Code
This job makes use of Paketo Buildpacks to create a Docker picture that comprises our coaching code and all its dependencies. Importantly, no Dockerfile is required: the Buildpacks builder will mechanically detect the Python app and set up PyTorch, Transformers, and different dependencies as specified within the necessities.txt file. Within the pipeline, this job is known as build-image
. It runs the Paketo Buildpacks builder (paketobuildpacks/builder:full
) with the supply code workspace mounted. Beneath the hood, it invokes the Cloud Native Buildpacks lifecycle creator:
/cnb/lifecycle/creator -skip-restore -app "$(workspaces.supply.path)" "$(params.APP_IMAGE)"
This command tells Buildpacks to create a container picture from the app supply within the workspace and tag it as $(params.APP_IMAGE)
. By default, APP_IMAGE
is ready to a Docker Hub repository (e.g., sylvainkalache/automate-pytorch-model-training-with-tekton-and-buildpacks:newest
).
Be aware that you just’ll must substitute together with your registry. I exploit Docker Hub on this instance. After this step, our coaching code is packaged right into a container picture and pushed to the registry.
Prepare the Mannequin
The second job, run-training
, depends upon the primary. This job pulls and runs the picture produced by the construct step to execute the mannequin coaching. Primarily, it begins a container from the picture (which has Python, GPT-2 code, and many others. put in) and runs the practice.py
script inside that container.
The Shared Workspace: Connecting the Dots
Let’s go over why we’d like a shared workspace in our Tekton pipeline. On this automated workflow composed of a number of levels, the construct stage and coaching stage require a shared place to trade information or knowledge. Our build-image job wants entry to our native supply code to containerize it. Later, the run-training job wants entry to the coaching knowledge. Lastly, when the coaching job efficiently generates a fine-tuned mannequin, we’d like a method to save and retrieve that invaluable output.
Each duties share a Tekton Workspace named “supply”. This workspace is backed by a PersistentVolumeClaim (source-pvc
), which is ready as much as mount our native code. That is how the pipeline accesses the coaching script and knowledge: the identical information you have got in training_process/
in your machine are mounted into the Tekton job pods at /workspace/supply
.

The Buildpacks builder reads the code from there to construct the picture, and the coaching container later reads the info and writes outputs there as nicely. Utilizing a shared workspace ensures that the mannequin saved throughout coaching persists after the duty completes (so we will retrieve it) and that each duties function on the identical code base. Be aware that this setup is appropriate for this tutorial, however it’s unlikely to be one thing you’d need for manufacturing.
Now, merging the 2 sections, that is what your entire coaching pipeline appears to be like like.

Now that we perceive the pipeline, let’s stroll by way of setting it up and working it.
Step-by-Step: Working the Tekton Pipeline for GPT-2 Coaching
Able to see it in motion? Comply with these steps to arrange your surroundings, deploy the Tekton sources, and set off the coaching pipeline. This assumes you have got a Kubernetes cluster (for native testing, you should utilize Kind with the supplied config) and kubectl
entry to it. Should you don’t have such a setup, here is a tough record of instructions you’ll must get the mandatory instruments. This tutorial was examined on Ubuntu 22.04.
Clone the Instance Repository
Get the code and pipeline manifests in your machine:
git clone https://github.com/sylvainkalache/Automate-PyTorch-Mannequin-Coaching-with-Tekton-and-Buildpacks.git
cd Automate-PyTorch-Mannequin-Coaching-with-Tekton-and-Buildpacks
Set up Tekton Pipelines
If Tekton will not be already put in in your cluster, set up it by making use of the official launch YAML:kubectl apply -f https://storage.googleapis.com/tekton-releases/pipeline/newest/launch.yaml
This command will create the Tekton CRDs (Pipeline, Process, PipelineRun, and many others.) in your cluster. You solely want to do that as soon as.
Apply the Pipeline and Quantity Manifests
Deploy the Tekton pipeline definition and supporting Kubernetes sources:
kubectl apply -f model-training-pipeline.yaml
kubectl apply -f source-pv-pvc.yaml
kubectl apply -f sa.yaml
Let’s go over the small print of every command:
- The primary command creates the Tekton Pipeline object
model-training-pipeline
within the cluster. - The second creates a PersistentVolume and Declare. The supplied
source-pv-pvc.yaml
assumes you’re utilizing Form and mounts the nativetraining_process/
listing into the cluster. It defines a hostPath quantity at/mnt/training_process
on the node, and ties it to a PVC namedsource-pvc
. - The third applies a ServiceAccount for Tekton to make use of when working the pipeline. This
sa.yml
ought to reference the Docker registry secret created within the subsequent step, permitting Tekton’s construct step to push the picture.
Create Docker Registry Secret
Tekton’s Buildpacks job will push the constructed picture to a container registry. For this, it’s essential present your registry credentials (e.g., Docker Hub login). Create a Kubernetes secret together with your registry auth particulars:
kubectl create secret docker-registry docker-hub-secret
--docker-username=
--docker-password=
--docker-server=
--namespace default
This secret will retailer your auth data. Make sure the ServiceAccount from step 3 is configured to make use of this secret for picture pull and push.
Run the Tekton Pipeline
With every thing in place, you can begin the pipeline, run:
tkn pipeline begin model-training-pipeline
--workspace title=supply,claimName=source-pvc
-s tekton-pipeline-sa
Right here we cross the PVC because the supply workspace. Additionally specify the service account (-s
) that has the registry secret. This can begin the pipeline. Use tkn pipelinerun logs -f
to observe the progress. You need to see output from the Buildpacks creator (detecting a Python app, putting in necessities) after which from the coaching script (printing coaching epochs and completion).
After the pipeline finishes efficiently, the fine-tuned mannequin will likely be saved within the training_process/output-model
listing (due to the PVC workspace, it persists in your native filesystem by way of the Form mount). We will now evaluate the GPT-2 mannequin’s output earlier than and after fine-tuning.
The Proof is within the Pudding: GPT-2 Output Earlier than vs. After Coaching
Did our automated pipeline enhance the mannequin? Let’s discover out.
Earlier than The Coaching
What does the off-the-shelf GPT-2 mannequin say? Run untrained_model.py
with a query. For instance:

We will see that GPT-2 gave a rambling response that didn’t appropriately reply the query.
After the Coaching Course of
Now let’s see GPT-2 tuned on our Q&A knowledge. We will load the mannequin saved by our pipeline and generate a solution. The script training_process/serve.py
does this. For instance:

As a result of we educated on a QA format, the fine-tuned GPT-2 will produce a solution after the |
separator. Certainly, after coaching, the mannequin’s reply to “How far is the solar?” was: “150 million kilometers away.” — exactly the reply from our coaching knowledge.
This easy comparability demonstrates that our CI/CD pipeline efficiently took our supply code, constructed it, educated the mannequin, and produced an improved model. Whereas this was a minimal dataset for illustrative functions, think about plugging in your bigger, domain-specific datasets. The pipeline construction stays unchanged, offering a strong and automatic path for mannequin updates.
Tekton + Buildpacks: A Profitable Combo for Less complicated ML CI/CD
Utilizing Tekton pipelines with Buildpacks provides a sublime answer for machine studying CI/CD workflows. Each Tekton and Buildpacks are cloud-native, open-source options that combine nicely with the remainder of your Kubernetes ecosystem.
By automating mannequin coaching on this approach, ML engineers and DevOps groups can collaborate extra successfully. The ML code is handled equally to utility code in CI/CD – each change can set off a pipeline that reliably builds and trains the mannequin. Tekton supplies the pipeline glue with Kubernetes scalability, and Paketo Buildpacks take the trouble out of containerizing ML workloads. The tip result’s quicker experimentation and deployment for ML fashions, achieved with a declarative, easy-to-maintain pipeline. I hope you prefer it!
Thanks For Studying
I’m Sylvain Kalache, main Rootly AI Labs: a fellow-driven neighborhood constructing AI-centric prototypes, open-source instruments, and analysis to redefine reliability engineering. Sponsored by Anthropic, Google Cloud, and Google DeepMind, all our work is freely obtainable on GitHub. For extra of my tales, comply with me on LinkedIn or discover my writing in my portfolio.

Sylvain Kalache, the creator, created all the pictures and diagrams on this article.