Fine tunning Large Language Language Models LLMs in 2024

Fine-Tuning Large Language Models LLMs by Shawhin Talebi

fine-tuning large language models

Over the past few years, the landscape of natural language processing (NLP) has undergone a remarkable transformation, all thanks to the advent of fine-tuning large language models. These sophisticated models have opened the doors to a wide array of applications, ranging from language translation to sentiment analysis and even the creation of intelligent chatbots. In the burgeoning field of deep learning, fine-tuning stands out as a pivotal phase that substantially augments the model’s performance, tailoring it for specific tasks. It’s not just a mere adjustment; it’s a strategic enhancement, a meticulous refinement that breathes precision and reliability into pre-trained models, making them more adept and efficient for new tasks. For example, the weight matrix may be quantized to 8-bits and then decomposed into two smaller matrices using singular value decomposition.

As a result, customers can ensure that their training data is not only high-quality but also directly aligned with the requirements of their projects. Retrieval augmented generation (RAG) is a well-known alternative to fine-tuning and is a combination of natural language generation and information retrieval. RAG ensures that language models are grounded by external up-to-date knowledge sources/relevant documents and provides sources. This technique bridges the gap between general-purpose models’ vast knowledge and the need for precise, up-to-date information with rich context. Thus, RAG is an essential technique for situations where facts can evolve over time.

Finetuning II – Updating All Layers

Methods such as feature-based approaches, in-context learning, and parameter-efficient finetuning techniques enable effective application of LLMs to new tasks while minimizing computational costs and resources. LLM fine-tuning has become an indispensable tool in the LLM requirements of enterprises to enhance their operational processes. By training LLMs for specific tasks, industries, or data sets, we are pushing the boundaries of what these models can achieve and ensuring they remain relevant and valuable in an ever-evolving digital landscape.

Prompt tuning enhances robustness for domain transfer and allows efficient prompt ensembling. It only requires storing a small task-specific prompt per task, making it simpler to reuse a single frozen model across various tasks compared to model tuning, which needs a task-specific model copy for each task. This comprehensive guide has taken us on an enlightening journey through the world of fine-tuning large language models. We started by understanding the significance of fine-tuning, which complements pre-training and empowers language models to excel at specific tasks. We dived into advanced techniques like multitask fine-tuning, parameter-efficient fine-tuning, and instruction fine-tuning, which push the boundaries of efficiency and control in NLP.

It introduces a small trainable submodule into the transformer architecture, freezing pre-trained model weights, and incorporating trainable rank decomposition matrices in each layer. This significantly reduces trainable parameters for downstream tasks, cutting down the count by up to 10,000 times and GPU memory requirements by 3 times. Despite this reduction, LoRA maintains or surpasses fine-tuning model quality across tasks, ensuring efficient task-switching with lowered hardware barriers and no additional inference latency.

It’s precisely situations like these where SuperAnnotate steps in to make a difference. This sounds great to have in every large language model, but remember that everything comes with a cost. From identifying relevant data sources to implementing optimized data processing mechanisms, having a well-defined strategy is crucial for successful LLM development…. Prompt engineering provides more direct control over the model’s behavior and output. Practitioners can experiment with different prompts to achieve desired results, enhancing interpretability. Hiren is CTO at Simform with an extensive experience in helping enterprises and startups streamline their business performance through data-driven innovation.

Related to in-context learning is the concept of hard prompt tuning where we modify the inputs in hope to improve the outputs as illustrated below. The convergence of generative AI and large language models (LLMs) has created a unique opportunity for enterprises to engineer powerful products…. Fine-tuning a model with a substantial number of parameters (~100M-100B) necessitates consideration of computational costs. The pivotal question revolves around the selection of parameters for (re)training. Microsoft has developed Turing NLG, a GPT-based model designed specifically for question answering tasks. To determine which architecture is ideal for your particular purpose, try out a few alternatives, such as transformer-based models or recurrent neural networks.

Supervised fine-tuning means updating a pre-trained language model using labeled data to do a specific task. Usually, the initial training of the language model is unsupervised, but fine-tuning is supervised. Fine-tuning is not a one-size-fits-all process, and experimenting with hyperparameters is key to achieving optimal performance. Adjusting parameters such as learning rates, batch sizes, and optimization algorithms can significantly impact the model’s convergence and overall efficacy.

Moreover, reinforcement learning with human feedback (RLHF) serves as an alternative to supervised finetuning, potentially enhancing model performance. However, the final layer of a BERT base model for binary classification consists of merely 1,500 parameters. Furthermore, the last two layers of a BERT base model account for 60,000 parameters – that’s only around 0.6% of the total model size.

Combining Fine-Tuning of Language Models with RAG: A Synergistic Approach

In this intricate process, the model risks losing its grasp on the broader language structure, concentrating its focus solely on the intricacies of the new task at hand. Instead of fine-tuning all the parameters of the LLM, LoRA injects task-specific low-rank matrices into the model’s layers, enabling significant computational and memory savings during the fine-tuning process. The prompt tuning approach mentioned above offers a more resource-efficient alternative to parameter finetuning. However, its performance typically falls short of finetuning, as it doesn’t update the model’s parameters for a specific task, which may limit its adaptability to task-specific nuances. Moreover, prompt tuning can be labor-intensive, as it often demands human involvement in comparing the quality of different prompts.

In this article, we will explore the different approaches to fine-tuning an LM and how they can be applied to real-world scenarios. We will also discuss the challenges and opportunities that come with fine-tuning an LM, and how they can be addressed to achieve the best possible results. With the instructions incorporated, we can now fine-tune the GPT-3 model on the augmented dataset. During fine-tuning, the instructions will guide the model’s sentiment analysis behavior.

So it’s typically more effective to begin with a model that has already had extensive general language training. You may, for instance, fine-tune the pre-trained GPT-3 model from OpenAI for a particular purpose. Through a continuous loop of evaluation and iteration, the model is refined until the desired performance is achieved. This iterative process ensures enhanced accuracy, robustness, and generalization capabilities of the fine-tuned model for the specific task or domain.

Optimize Your Language Models with LangChain’s Evaluation

Memory is necessary for full fine-tuning to store the model and several other training-related parameters. These extra parts may be much bigger than the model and quickly outgrow the capabilities of consumer hardware. Companies like Anthropic used RLHF to imbue their language models like Claude with improved truthfulness, ethics, and safety awareness beyond just task competence. Sure, I can provide a detailed explanation of LoRA (Low-Rank Adaptation) along with the mathematical formulation and code examples.

Full fine-tuning results in a new version of the model for every task you train on. Each of these is the same size as the original model, so it can create an expensive storage problem if you’re fine-tuning for multiple tasks. Fine-tuning is about turning general-purpose models and turning them into specialized models. It bridges the gap between generic pre-trained models and the unique requirements of specific applications, ensuring that the language model aligns closely with human expectations. Think of OpenAI’s GPT-3, a state-of-the-art large language model designed for a broad range of natural language processing (NLP) tasks. Suppose a healthcare organization wants to use GPT-3 to assist doctors in generating patient reports from textual notes.

The size of the task-specific dataset, how similar the task is to the pre-training target, and the computational resources available all affect how long and complicated the fine-tuning procedure is. However, if you have a huge dataset and are working on a completely new task or area, training a language model from scratch rather than fine-tuning a pre-trained model might be more efficient. Fine-tuning involves updating the weights of a pre-trained language model on a new task and dataset. Instruction fine-tuning takes the power of traditional fine-tuning to the next level, allowing us to control the behavior of large language models precisely.

This straightforward adoption involves inserting adapters into each transformer layer and adding a classifier layer atop the pre-trained model. Fine-tuning is crucial when there is a need for domain-specific expertise or when working with limited data for a particular task. It enables the model to leverage its pre-existing linguistic knowledge while adapting to the nuances and intricacies of the new task or domain. The fine-tuned LLM retains the general language understanding acquired during pre-training but becomes more specialized and optimized for the specific requirements of the desired application. It leverages a large language model’s pre-trained knowledge to capture rich semantic data without human feature engineering.

For instance, when a new data breach method arises, you may fine-tune a model to bolster organizations defenses and ensure adherence to updated data protection regulations. To navigate the waters of catastrophic forgetting, we need strategies to safeguard the valuable knowledge captured during pre-training. However, their performance may lag behind full fine-tuning for tasks that are vastly different from general language or require more holistic specialization. This is the 5th article in a series on using Large Language Models (LLMs) in practice.

You can foun additiona information about ai customer service and artificial intelligence and NLP. It’s about training the machine learning model using examples that demonstrate how the model should respond to the query. The dataset you use for fine-tuning large language models has to serve the purpose of your instruction. For example, suppose you fine-tune your model to improve its summarization skills. In that case, you should build up a dataset of examples that begin with the instruction to summarize, followed by text or a similar phrase.

It trains the model on labeled data to fit certain tasks, making it versatile for many NLP activities. Transfer learning involves training a model on a large dataset and then applying what it has learnt to a smaller, related dataset. The effectiveness of this strategy has been demonstrated in tasks involving NLP, such as text classification, sentiment analysis, and machine translation.

It can be a complex and costly process, but it can also lead to high performance and valuable insights that can be used to improve the performance of other systems. One of the key benefits of LLM finetuning is that it allows the model to learn domain-specific information, which can help it better understand and generate appropriate language for a particular task or context. This can lead to more accurate and relevant results, and can also help to mitigate some of the biases and limitations that may be present in the original LLM model. Second, fine-tuning can help to make a model more useful and practical for specific applications.

Similar to the feature-based approach, we keep the parameters of the pretrained LLM frozen. We only train the newly added output layers, analogous to training a logistic regression classifier or small multilayer perceptron on the embedded features. In terms of data collection, SuperAnnotate offers the ability to gather annotated question-response pairs.

Self-supervised techniques to fine-tune from raw data without labels may open up new frontiers. And compositional approaches to combine fine-tuned sub-models trained on different tasks or data could allow constructing highly tailored models on-demand. In this example, we load a pre-trained BERT model for sequence classification and define a LoRA configuration. The r parameter specifies the rank of the low-rank update, and lora_alpha is a scaling factor for the update. The target_modules parameter indicates which layers of the model should receive the low-rank updates. After creating the LoRA-enabled model, we can proceed with the fine-tuning process using the standard training procedure.

Utilizing benchmarks like ARC, HellaSwag, MMLU, and Truthful QA, the evaluation phase ensures the models’ robust performance, while error analysis offers a mirror for continuous improvement. In a nutshell, they all involve introducing a small number of additional parameters that we finetuned (as opposed to finetuning all layers as we did in the Finetuning II approach above). In a sense, Finetuning I (only finetuning the last layer) could also be considered a parameter-efficient finetuning technique. However, techniques such as prefix tuning, adapters, and low-rank adaptation, all of which “modify” multiple layers, achieve much better predictive performance (at a low cost). The iterative nature of fine-tuning, coupled with the need for precise hyper-parameter tuning, highlights the blend of art and science in this process. It takes a significant amount of computational power and data to fine-tune a large language model from scratch.

Additionally, we explored real-world applications, witnessing how fine-tuned models revolutionize sentiment analysis, language translation, virtual assistants, medical analysis, financial predictions, and more. In conclusion, Fine-tuning Large Language Models (LLMs) using Parameter-Efficient Fine-Tuning (PEFT) emerges as a pivotal approach in enhancing model performance while mitigating computational costs. Techniques like LoRA, IA3, and various others discussed signify the evolution towards efficient adaptation of pre-trained models to specific tasks. As the field advances, the continual refinement of PEFT methodologies promises to play a crucial role in maximizing the potential of large language models for a diverse array of applications.

When a model is fine-tuned, it is adapted to the specific needs and requirements of the application, rather than being a generic, one-size-fits-all solution. This can make the model more effective and efficient, as it can generate predictions and actions that are more relevant and useful to the user or user’s business. With the custom classification head in place, we can now fine-tune the model on the sentiment analysis dataset.

  • To determine which architecture is ideal for your particular purpose, try out a few alternatives, such as transformer-based models or recurrent neural networks.
  • Data synthesis involves generating new training data using techniques such as data augmentation or data generation.
  • Fine-tuning a model with a substantial number of parameters (~100M-100B) necessitates consideration of computational costs.
  • By exposing the model to these labeled examples, it can adjust its parameters and internal representations to become well-suited for the target task.

Given the complexity of language models, overfitting—where the model memorizes the training data rather than generalizing from it—can be a concern. Regularization methods, such as dropout or weight decay, act as safeguards, promoting better generalization and preventing the model from becoming too specialized to the training data. These techniques contribute to the robustness of the fine-tuned model, ensuring its effectiveness on new, unseen data. Fine-tuning large language models has emerged as a powerful technique to adapt these pre-trained models to specific tasks and domains. As the field of NLP advances, fine-tuning will remain crucial to developing cutting-edge language models and applications. Fine-tuning all layers of a pretrained LLM remains the gold standard for adapting to new target tasks, but there are several efficient alternatives for using pretrained transformers.

The text-text fine-tuning technique tunes a model using pairs of input and output text. This can be helpful when the input and output are both texts, like in language translation. In adaptive fine-tuning, the learning rate is dynamically changed while the model is being tuned to enhance performance. For example adjusting the learning rate dynamically during fine-tuning to prevent overfitting and achieve better performance on a specific task, such as image classification.

Unsloth implements optimized Triton kernels, manual autograds, etc, to speed up training. For example, Google has developed T5, a GPT-based model optimized for text summarization fine-tuning large language models tasks. The main innovation of GPT-3 is its enormous size, which allows it to capture a huge amount of language knowledge thanks to its astounding 175 billion parameters.

Therefore, it is important to carefully consider the finetuning process and take steps to ensure that the model is fine-tuned correctly. GPT-3 Generative Pre-trained Transformer 3 is a ground-breaking language model architecture that has transformed natural language generation and understanding. The Transformer model is the foundation for the GPT-3 architecture, which incorporates several parameters to produce exceptional performance. Error analysis is an indispensable part of the evaluation, offering deep insights into the model’s performance, pinpointing the areas of strength and highlighting the zones that need improvement. It involves analyzing the errors made by the model during the evaluation, understanding their root causes, and devising strategies for improvement. It’s not just about identifying errors; it’s about understanding them, learning from them, and transforming them into pathways for enhancement and optimization.

Domain adaptation and transfer learning can be useful when the new task is related to the original task or when the new data is similar to the original data, respectively. Task-specific fine-tuning is useful when the original task and the new task are different and a task-specific model is needed. Fine-tuning an LM can be a complex and time-consuming process, but it can also be very effective in improving the performance of a model on a specific task.

To provide some practical context for the discussions below, we are finetuning an encoder-style LLM such as BERT (Devlin et al. 2018) for a classification task. Furthermore, we can also finetuning decoder-style LLMs to generate multiple-sentence https://chat.openai.com/ answers to specific instructions instead of just classifying texts. The playground offers templates like GPT fine-tuning, chat rating, using RLHF for image generation, model comparison, video captioning, supervised fine-tuning, and more.

This model knew how to carry out named entity recognition before fine-tuning correctly identifying. Often, just a few hundred or thousand examples can result in good performance compared to the billions of pieces of text that the model saw during its pre-training phase. Once your instruction data set is ready, as with standard supervised learning, you divide the data set into training validation and test splits.

LoftQ: Reimagining LLM fine-tuning with smarter initialization – Microsoft

LoftQ: Reimagining LLM fine-tuning with smarter initialization.

Posted: Tue, 07 May 2024 16:00:00 GMT [source]

Prompt tuning, a PEFT method, adapts pre-trained language models for specific tasks differently. Unlike model tuning, where all parameters are adjusted, prompt tuning involves Chat PG learning flexible prompts through backpropagation. These prompts, fine-tuned with labeled examples, outperform GPT-3’s few-shot learning, especially with larger models.

A pre-trained model, such as GPT-3, is utilized as the starting point for the new task to be fine-tuned. Compared to starting from scratch, this allows for faster convergence and better outcomes. Using a pre-trained convolutional neural network, initially trained on a large dataset of images, as a starting point for a new task of classifying different species of flowers with a smaller labeled dataset. Large language models can be fine-tuned to function well in particular tasks, leading to better performance, more accuracy, and better alignment with the intended application or domain. For instance, to construct a specialized legal language model, a large language model pre-trained on a sizable corpus of text data can be refined on a smaller, domain-specific dataset of legal documents. The improved model would then be more adept at comprehending legal jargon accurately.

With Simform as your trusted partner, you can confidentiality navigate through the complexities of AI/ML. They offer unparalleled support in customizing and optimizing models for specific tasks and domains. The next stage in fine-tuning a large language model is to add task-specific layers after pre-training. These extra layers modify the learned representations for a particular job on top of the pre-trained model. For instance, the GPT-3 model by OpenAI was pre-trained using a vast dataset of 570GB of text from the internet. By exposure to a diverse range of textual information during pre-training,  it learned to generate logical and contextually appropriate responses to prompts.

Regularization Techniques

In the case of translation, you should include instructions like “translate this text.” These prompt completion pairs allow your model to «think» in a new niche way and serve the given specific task. Fine-tuning a Large Language Model (LLM) involves adjusting the parameters or weights of a pre-trained language model to adapt it to a new and specific task or dataset. In the context of natural language processing, LLMs are often trained on vast amounts of general language data. Fine-tuning allows practitioners to take advantage of this pre-existing knowledge and customize the model for more specialized applications. While pre-trained language models are remarkable, they are not task-specific by default. Fine-tuning large language models is adapting these general-purpose models to perform specialized tasks more accurately and efficiently.

Through meticulous hyperparameter tuning, one can strike the right balance between model generalization and task-specific adaptation, ultimately leading to improved results in medical summary generation. When tasks have similar characteristics, this method can be helpful and enhance the model’s overall performance. For example, training a single model to perform named entity recognition, part-of-speech tagging, and syntactic parsing simultaneously to improve overall natural language understanding. When LLM finetuning is done incorrectly, it can lead to less effective and less practical models with worse performance on specific tasks.

PEFT empowers parameter-efficient models with impressive performance, revolutionizing the landscape of NLP. This approach allows developers to specify desired outputs, encourage certain behaviors, or achieve better control over the model’s responses. In this comprehensive guide, we will explore the concept of instruction fine-tuning and its implementation step-by-step. Despite these limitations, full fine-tuning remains a powerful and widely used technique when resources permit and the target task diverges significantly from general language. While pre-training captures broad language understanding from a huge and diverse text corpus, fine-tuning specializes that general competency.

While GPT-3 can understand and create general text, it might not be optimized for intricate medical terms and specific healthcare jargon. Fine-tuning large language models involves training the pre-trained model on a smaller, task-specific dataset. By exposing the model to these labeled examples, it can adjust its parameters and internal representations to become well-suited for the target task.

fine-tuning large language models

We start by introducing key FT concepts and techniques, then finish with a concrete example of how to fine-tune a model (locally) using Python and Hugging Face’s software ecosystem. Zero-shot inference incorporates your input data in the prompt without extra examples. If zero-shot inference doesn’t yield the desired results, ‘one-shot’ or ‘few-shot inference’ can be used. These tactics involve adding one or multiple completed examples within the prompt, helping smaller LLMs perform better. Unsloth is an open-source platform for efficient fine-tuning of popular open-source LLMs like Llama-2, Mistral, and other derivatives.

Finetuning large language models (LLMs) can lead to significant improvements in their performance on specific tasks, making them more useful and practical for real-world applications. When done correctly, the results of LLM finetuning can be quite impressive, with models achieving superior performance on tasks such as language translation, text summarization, and question answering. To prevent overfitting during the fine-tuning process, regularization techniques play a crucial role.

Instruction fine-tuning, where all of the model’s weights are updated, is known as full fine-tuning. Let’s take an example to picture this better; if you ask a pre-trained model,»Why is the sky blue?» it might reply, «Because of the way the atmosphere scatters sunlight.» This answer is simple and direct. However, the answer might be too brief for a chatbot for a science educational platform. In situations where time is a critical factor, prompt engineering enables rapid prototyping and experimentation.

Transfer learning can be useful when the new task is related to the original task, but may be limited by the similarity between the two tasks and the amount of new data available. Task-specific fine-tuning can be effective in many cases, but may be limiting when the amount of new data available is limited. When selecting a technique for fine-tuning an LM, it’s important to consider the characteristics of the new task and the availability of new data.

The size of the model is decreased during fine-tuning to increase its efficiency and use fewer resources. For example, decreasing the size of a pre-trained language model like GPT-3 by removing unnecessary layers to make it smaller and more resource-friendly while maintaining its performance on text generation tasks. If you have a small amount of labeled data, modifying a pre-trained language model can improve its performance for your particular task. By fine-tuning a pre-trained language model like GPT-3 with a modest dataset of labeled client questions, you can enhance its capabilities. Take the task of performing a sentiment analysis on movie reviews as an illustration. Instead of training a model from scratch, you may leverage a pre-trained language model such as GPT-3 that has already been trained on a vast corpus of text.

Data preparation involves gathering and preprocessing the data used to fine-tune the large language model. Businesses wishing to streamline their operations using the power of AI/ML have a plethora of options available now, thanks to large language models like GPT-3. With the power of fine-tuning, we navigate the vast ocean of language with precision and creativity, transforming how we interact with and understand the world of text. So, embrace the possibilities and unleash the full potential of language models through fine-tuning, where the future of NLP is shaped with each finely tuned model. Initially, the model focuses on pre-training knowledge and slowly incorporates the new task data, minimizing the risk of catastrophic forgetting.

fine-tuning large language models

For instance, you may fine-tune a model pre-trained on a huge corpus of new items to categorize a smaller dataset of scientific papers by topic. We will examine the top techniques for tuning in sizable language models in this blog. We’ll also talk about the fundamentals, training data methodologies, strategies, and best practices for fine-tuning. Imagine our language model as a ship’s cargo hold filled with various knowledge containers, each representing different linguistic nuances.

My endeavor in writing this blog is not just to share knowledge, but also to connect with like-minded individuals, professionals, and organizations. The right choice of learning rate, batch size, and epochs can make a world of difference, steering the fine-tuning process in the right direction, ensuring optimal refinement and performance enhancement. However, if we have access to the LLM, adapting and finetuning it on a target task using data from a target domain usually leads to superior results. Hyperparameters are tunable variables that play a key role in the model training process. Learning rate, batch size, number of epochs, weight decay, and other parameters are the key hyperparameters to adjust that find the optimal configuration for your task.

These models are pre-trained on massive datasets comprising billions of words from the internet, books, and other sources. This dataset is a treasure trove of diverse instructions, designed to train and fine-tune models to follow complex instructions effectively, ensuring their adaptability and efficiency in handling varied tasks. Over the years, researchers developed several techniques (Lialin et al.) to finetune LLM with high modeling performance while only requiring the training of only a small number of parameters. These methods are usually referred to as parameter-efficient finetuning techniques (PEFT). As we can see, training the last layer is the fastest but also results in the poorest modeling performance. As expected, training more layers improves the modeling performance but it also increases the computational cost.

To fine-tune the model for the specific goal of sentiment analysis, you would use a smaller dataset of movie reviews. Fine-tuning in large language models (LLMs) involves re-training pre-trained models on specific datasets, allowing the model to adapt to the specific context of your business needs. This process can help you create highly accurate language models, tailored to your specific business use cases. What if we could go beyond traditional fine-tuning and provide explicit instructions to guide the model’s behavior? Instruction fine-tuning does that, offering a new level of control and precision over model outputs. Here we will explore the process of instruction fine-tuning large language models for sentiment analysis.

P-tuning enhances GPT-like language models in Natural Language Understanding (NLU) tasks, surpassing traditional fine-tuning methods. It utilizes trainable continuous prompt embeddings, showing substantial improvements in precision and world knowledge recovery on benchmarks like LAMA and SuperGLUE. P-tuning minimizes the need for prompt engineering and excels in few-shot SuperGLUE scenarios compared to current approaches. Continuous prompts optimization, aided by a downstream loss function and prompt encoder, addresses challenges of discreteness and association. LoRA (Low-Rank Adaptation) is a fine-tuning approach for large language models, akin to adapters.

Traditional fine-tuning embeds data into the model’s architecture, essentially ‘hardwriting’ the knowledge, which prevents easy modification. On the other hand, RAG permits continuous updates in training data and allows removal/revision of data, ensuring the model remains current and accurate. It’s no secret that large language models (LLMs) are evolving at a wild speed and are turning heads in the generative AI industry. Enterprises aren’t just intrigued; they’re obsessed with LLMs, looking for ways to integrate this technology into their operations. Industry leaders and tech enthusiasts are showing a growing appetite to deepen their understanding of LLMs.

The key distinction between training and fine-tuning is that training starts from scratch with a randomly initialized model dedicated to a particular task and dataset. On the other hand, fine-tuning adds to a pre-trained model and modifies its weights to achieve better performance. LLM finetuning can have a significant impact on the effectiveness and efficiency of language models, making them more useful and practical for a wide range of applications. When done correctly, the results of LLM finetuning can be quite impressive, and can help to push the boundaries of what is possible with language modeling. Each of these techniques has its own advantages and disadvantages, and the choice of technique depends on the specific problem at hand. Domain adaptation can be fast and efficient, but may be limited by the similarity between the original and new tasks.