Illustration of AI model training process with smaller and larger models

Making AI Smarter and Smaller: A Guide to Efficient Model Training

Making AI Smarter and Smaller: A Practical Guide to Efficient Model Training

Hi, I'm Sanchay Thalnerkar, an AI Engineer. I've been exploring ways to make AI more efficient, and I'm excited to share an interesting approach I've been working on. In the world of artificial intelligence, bigger models often steal the spotlight, but what if you could get similar results without the hefty price tag and massive computing power? This guide walks you through a clever approach: using a large AI model to create top-notch training data, then using that data to train a smaller, more manageable model.

My Method: Efficient AI in Three Steps

First, we leverage a large model like Meta-Llama-3.1-405B, made accessible by AI/ML API, to generate a dataset of marketing scenarios. The AI/ML APIs platform allows us to tap into the vast capabilities of this powerful model, creating the perfect study guide for our smaller model. This data is then formatted using the alpaca prompt structure, making it easy for a smaller model to learn effectively. Finally, we use a tool called Unsloth to efficiently train our smaller model, starting with Meta-Llama-3.1-8B, on this data.

The outcome? A model that's smaller, faster, and capable of producing high-quality outputs for specific marketing tasks, comparable to what you'd expect from a much larger model. For instance, when prompted with Create a marketing campaign to promote a chocolate bar for Cadbury, targeting adults and boomers, the results can be surprisingly good.

This method offers several benefits. It allows for creating AI models specialized in specific tasks, making it accessible even to small companies or individual developers without the need for expensive hardware or massive budgets. By focusing on generating diverse, high-quality training data and carefully fine-tuning your smaller model, you can create powerful and efficient AI tools tailored to your needs.

Step 1: Setting Up the Environment

Before we begin, let's set up our development environment:

  • Install Python: If you haven't already, download and install Python from Python Download.
  • Create a virtual environment:
  1. Open Command Prompt
  2. Navigate to your project directory
  3. Run the following commands:
python -m venv .venv
source .venv/bin/activate
  • Install required packages: Run the following commands in your activated virtual environment:
pip install necessary-package-name

Additional dependencies: Based on the code in the tutorial, you'll also need to install:

pip install unsloth alpaca-prompt

Start by importing libraries.

Step 1: Setting Up the AI/ML API Client and Handling API Calls

Before we dive into creating the data generation function, it's crucial to first set up the AI/ML API client. This API offers a suite of powerful AI functionalities, including text completion, image inference, and more. Let's walk through the necessary steps to get everything configured and ready for use.

1.1: Create an Account and Obtain an API Key

To start using the AI/ML API, you'll need to create an account and generate an API key. Follow these steps:

  1. Create an Account: Visit the AI/ML API website and sign up for an account.
  2. Generate an API Key: After logging in, navigate to your account dashboard and generate your API key here.

You'll need to use this API key to authenticate your requests and access the various AI models available through the API.

1.2: Initialize the AI/ML API Client

Once you have your API key, you can set up the client in your environment. This client will be used to interact with the AI/ML API for making various AI-related requests.

import requests
API_KEY = "your_api_key_here"

Replace your_api_key_here with the API key you generated earlier. This client will be the primary interface for sending requests to the AI/ML API.

1.3: Implementing Rate-Limited API Calls

To handle the API interactions more effectively, especially under rate limits or other transient issues, we define a function called rate_limited_api_call. This function ensures that our requests are resilient to potential issues like rate limiting by the API:

def rate_limited_api_call(model, messages):  # Define function
    response = requests.post(API_ENDPOINT, headers=headers, json=data)
    return response.json()

1.4: Handling Errors and Retries

To further enhance the reliability of our API calls, we define a function called get_model_responses. This function is responsible for handling errors and retrying the API call a specified number of times (max_retries) before giving up:

def get_model_responses(num_retries=3):  # Function definition
    for i in range(num_retries):
        try:
            response = rate_limited_api_call()
            return response
        except Exception as e:
            print(f"Error: {e}")

Step 2: Creating Data Generation Function

Let's walk through the entire process of how the data generation function works, step by step.

First, we define a function called generate_multiple_marketing_samples. This function's job is to create several marketing scenarios that we can later use to train a smaller, more efficient AI model. Here's how it starts:

Setting Up Instructions

In this first part, we create two messages. The system_message sets the stage, telling the AI that it's supposed to act like a top-tier marketing expert. The user_message gives specific instructions: it tells the AI how many scenarios to generate (based on the num_samples we input) and how to format each scenario. The format includes three parts: an instruction, some background information, and a response, which will be the solution to the marketing task.

Example Content Generated

Below are some examples of the marketing content generated. The outputs include Facebook ads, sales pages, and Twitter threads tailored to specific audiences and objectives.

Example 1: Facebook Ad for a Fitness Program

Hook: "Get Fit, Not Frustrated: Unlock Your Dream Body in Just 15 Minutes a Day!"
Narrative: "As a busy professional, you know how hard it is to find time for the gym..."
Climax: "Join our community of like-minded individuals..."
Resolution: "Sign up now and take the first step towards a healthier, happier you!"

Example 2: Sales Page for an E-book on Entrepreneurship

Hook: "Unlock the Secrets to Building a 6-Figure Business from Scratch"
Narrative: "Are you tired of living paycheck to paycheck?..."
Climax: "Get instant access to our comprehensive guide..."
Resolution: "Buy now and start building the business of your dreams!"

Example 3: Twitter Thread for a Sustainable Fashion Brand

1/6 "The fashion industry is one of the largest polluters in the world..."
2/6 "Our mission is to make sustainable fashion accessible..."
6/6 "Together, we can make a difference..."

Why This Method Works

This function is simple yet powerful. It allows us to harness the capabilities of a large AI model to generate high-quality, diverse training data. This data is then perfectly formatted to train a smaller model that can perform specific marketing tasks.

Step 3: Quality Control

After generating our samples, it's crucial to ensure that they meet a certain standard of quality. This is where our quality control function comes into play. The goal here is to filter out any samples that might not be good enough for training our AI model.

def quality_control_function(sample):
    if len(sample) < 50:  # Example check
        return False
    if is_repetitive(sample):
        return False
    return True

Step 4: Ensuring Diversity

To build a well-rounded and effective AI model, it's essential that our training data covers a broad range of marketing scenarios. This is where our diversity tracking function comes into play.

def diversity_tracking(dataset):
    industry_counter = Counter()
    // Counting logic goes here
    report_results(industry_counter)

Step 5: Fine-Tuning Dataset Creation

In this step, we aim to create a dataset specifically designed for fine-tuning a language model to generate marketing and social media content.

def create_finetuning_dataset():
    while samples_created < target_samples:
        generate_samples()  # Generate new samples
        save_progress()  # Save progress

Step 6: Model Preparation and Quantization

With the dataset ready, the next crucial step is to prepare the language model for fine-tuning.

model = FastLanguageModel.from_pretrained("model_path")

Step 7: Applying LoRA Adapters to the Model

This step improves the base model by applying LoRA (Low-Rank Adaptation) adapters.

lora_config = LoRAConfig(rank=16, alpha=32, dropout=0)

Step 8: Formatting Dataset for Training

In this step, we prepare the dataset for training by formatting it into a structure that the model can easily process.

def formatting_prompts_func(example):
    formatted_example = f"{example['instruction']}: {example['input']}\n
{example['response']}"
    return formatted_example

Step 9: Training the Model

In this step, we move on to the crucial phase of training the model using the SFTTrainer from the Hugging Face TRL library.

trainer.train(dataset)

Step 10: Generating and Parsing Output

After the model has been trained, we focus on generating text based on a given prompt.

output = model.generate(prompt)
parsed_output = parse_output(output)

Step 11: Saving and Reloading the Model

In this final step, we focus on saving the fine-tuned model and tokenizer.

save_model(model, "lora_model")

Comparison between 405B and 8B for the Same Prompt

When comparing the outputs of the original 405B model with those from the fine-tuned 8B model, the differences are clear and significant. The fine-tuned model demonstrates a more refined and practical approach, making it a standout tool for real-world applications.

Analysis of Fine-Tuned Model's Strengths

The fine-tuned model is more aligned with practical, real-world applications. Here are its strengths:

  • Focused and On-Point: The fine-tuned model delivers exactly what you need.
  • Clear and Concise: The fine-tuned model excels in clear communication.
  • Tailored to the Task: Provides responses that are specifically suited to the task.
  • Time-Saving: The efficiency of the fine-tuned model means you spend less time editing.

This model proves to be a powerful and practical tool for content creation, especially for marketers and busy professionals.

The entire process of fine-tuning and generating content using the 8B model was achieved at a cost of approximately $3-5, making it an affordable and efficient solution for high-quality content creation.

Back to blog

Leave a comment