Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
351841a
model loading
kylesayrs Mar 15, 2025
75d7d1e
datasets
kylesayrs Mar 15, 2025
4a22b90
post train works
kylesayrs Mar 15, 2025
48a1c40
Merge remote-tracking branch 'origin' into kylesayrs/llm-compressor
kylesayrs Mar 15, 2025
4761351
pipeline resolution
kylesayrs Mar 15, 2025
7c4dee4
style
kylesayrs Mar 15, 2025
63252ad
implement train skeleton
kylesayrs Mar 15, 2025
e32e1c4
cleanup
kylesayrs Mar 15, 2025
51fb047
extract data pipelines
kylesayrs Mar 15, 2025
710fe24
extract data pipeline events, integrate smoothquant, begin independen…
kylesayrs Mar 16, 2025
0a3f8f2
model saving
kylesayrs Mar 16, 2025
7f59359
add calibration data check
kylesayrs Mar 16, 2025
abf1818
add save path
kylesayrs Mar 17, 2025
e33793e
only send after start and before end
kylesayrs Mar 17, 2025
e8a2fe9
move initialize and finalize into pipelines
kylesayrs Mar 18, 2025
058ccf6
WIP: implement get_modifiers_from_recipe
kylesayrs Mar 24, 2025
81c60f1
merge with extract pipelines, remove event dependency for current_index
kylesayrs Mar 26, 2025
244ae34
merge in layerwise performance
kylesayrs Mar 27, 2025
43708af
trainer integration, remove pipeline from quantization modifier, remo…
kylesayrs Mar 27, 2025
bb2def2
add entrypoints
kylesayrs Mar 27, 2025
6274601
remove custom data classes
kylesayrs Mar 27, 2025
0281234
remove some no-longer-relevant tests
kylesayrs Mar 28, 2025
02834f4
simplify data args
kylesayrs Mar 28, 2025
ebb0410
reduce import path length
kylesayrs Mar 28, 2025
34b88f8
remove llmcompressor folder
kylesayrs Mar 28, 2025
eccddaa
remove unused file
kylesayrs Mar 28, 2025
02d81e9
move out resolve_modifier_quantization_config
kylesayrs Mar 28, 2025
fffd20a
rename file
kylesayrs Mar 28, 2025
e5c66b7
reduce core import dependency on modifiers
kylesayrs Mar 28, 2025
c3ba7ca
validated training
kylesayrs Mar 28, 2025
d4552eb
training with distillation works
kylesayrs Mar 29, 2025
4c3e70d
cleanup
kylesayrs Mar 29, 2025
bd9ca1f
remove typehinting
kylesayrs Mar 29, 2025
a525a3c
enable quantization during calibration
kylesayrs Mar 29, 2025
30c7169
update script
kylesayrs Mar 31, 2025
2c3e39b
break out register_calibration_hooks
kylesayrs Mar 31, 2025
da62925
WIP
kylesayrs Apr 1, 2025
1e88239
clean up calibration, allow shapes to be iterated during tracing
kylesayrs Apr 1, 2025
65f7912
comment
kylesayrs Apr 1, 2025
2da0916
confirm whisper
kylesayrs Apr 1, 2025
6c7dad7
WIP
kylesayrs Apr 2, 2025
4e5fb5c
use calibration_epoch_end in basic pipeline
kylesayrs Apr 2, 2025
d0f6790
qmod
kylesayrs Apr 2, 2025
12eb66f
handle no-data
kylesayrs Apr 2, 2025
b00ca59
skip
kylesayrs Apr 5, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions examples/multimodal_audio/whisper_example.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
import torch
from datasets import load_dataset
from transformers import WhisperProcessor
from transformers import WhisperForConditionalGeneration, WhisperProcessor

from llmcompressor import oneshot
from llmcompressor.modifiers.quantization import GPTQModifier
from llmcompressor.transformers.tracing import TraceableWhisperForConditionalGeneration

# Select model and load it.
MODEL_ID = "openai/whisper-large-v3"

model = TraceableWhisperForConditionalGeneration.from_pretrained(
model = WhisperForConditionalGeneration.from_pretrained(
MODEL_ID,
device_map="auto",
torch_dtype="auto",
Expand Down
14 changes: 6 additions & 8 deletions src/llmcompressor/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@

# flake8: noqa

from .core import LLMCompressor
from .entrypoints import oneshot, post_train, train
from .logger import LoggerConfig, configure_logger, logger
from .version import (
__version__,
Expand All @@ -32,12 +34,8 @@
"configure_logger",
"logger",
"LoggerConfig",
"LLMCompressor",
"oneshot",
"post_train",
"train",
]

from llmcompressor.core.session_functions import (
active_session,
callbacks,
create_session,
reset_session,
)
from llmcompressor.entrypoints import Oneshot, oneshot, train
3 changes: 1 addition & 2 deletions src/llmcompressor/args/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,5 @@

from .dataset_arguments import DatasetArguments
from .model_arguments import ModelArguments
from .recipe_arguments import RecipeArguments
from .post_train_arguments import PostTrainArguments
from .training_arguments import TrainingArguments
from .utils import parse_args
118 changes: 51 additions & 67 deletions src/llmcompressor/args/dataset_arguments.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,71 +3,11 @@

from transformers import DefaultDataCollator


@dataclass
class DVCDatasetArguments:
"""
Arguments for training using DVC
"""

dvc_data_repository: Optional[str] = field(
default=None,
metadata={"help": "Path to repository used for dvc_dataset_path"},
)


@dataclass
class CustomDatasetArguments(DVCDatasetArguments):
"""
Arguments for training using custom datasets
"""

dataset_path: Optional[str] = field(
default=None,
metadata={
"help": (
"Path to the custom dataset. Supports json, csv, dvc. "
"For DVC, the to dvc dataset to load, of format dvc://path. "
"For csv or json, the path containing the dataset. "
),
},
)

text_column: str = field(
default="text",
metadata={
"help": (
"Optional key to be used as the `text` input to tokenizer/processor "
"after dataset preprocesssing"
)
},
)

remove_columns: Union[None, str, List] = field(
default=None,
metadata={"help": "Column names to remove after preprocessing (deprecated)"},
)

preprocessing_func: Union[None, str, Callable] = field(
default=None,
metadata={
"help": (
"Typically a function which applies a chat template. Can take the form "
"of either a function to apply to the dataset, a name defined in "
"src/llmcompressor/transformers/utils/preprocessing_functions.py, or "
"a path to a function definition of the form /path/to/file.py:func"
)
},
)

data_collator: Callable[[Any], Any] = field(
default_factory=lambda: DefaultDataCollator(),
metadata={"help": "The function to used to form a batch from the dataset"},
)
from llmcompressor.typing import DatasetType


@dataclass
class DatasetArguments(CustomDatasetArguments):
class DatasetArguments:
"""
Arguments pertaining to what data we are going to input our model for
calibration, training
Expand All @@ -76,7 +16,7 @@ class DatasetArguments(CustomDatasetArguments):
arguments to be able to specify them on the command line
"""

dataset: Optional[str] = field(
dataset: Union[str, DatasetType, None] = field(
default=None,
metadata={
"help": (
Expand Down Expand Up @@ -109,10 +49,7 @@ class DatasetArguments(CustomDatasetArguments):
default_factory=dict,
metadata={"help": "Additional keyboard args to pass to datasets load_data"},
)
splits: Union[None, str, List, Dict] = field(
default=None,
metadata={"help": "Optional percentages of each split to download"},
)
split: Optional[str] = field(default=None)
num_calibration_samples: Optional[int] = field(
default=512,
metadata={"help": "Number of samples to use for one-shot calibration"},
Expand Down Expand Up @@ -171,3 +108,50 @@ class DatasetArguments(CustomDatasetArguments):
"will execute code present on the Hub on your local machine."
},
)

dataset_path: Optional[str] = field(
default=None,
metadata={
"help": (
"Path to the custom dataset. Supports json, csv, dvc. "
"For DVC, the to dvc dataset to load, of format dvc://path. "
"For csv or json, the path containing the dataset. "
),
},
)

text_column: str = field(
default="text",
metadata={
"help": (
"Optional key to be used as the `text` input to tokenizer/processor "
"after dataset preprocesssing"
)
},
)
remove_columns: Union[None, str, List] = field(
default=None,
metadata={"help": "Column names to remove after preprocessing (deprecated)"},
)

preprocessing_func: Union[None, str, Callable] = field(
default=None,
metadata={
"help": (
"Typically a function which applies a chat template. Can take the form "
"of either a function to apply to the dataset, a name defined in "
"src/llmcompressor/transformers/utils/preprocessing_functions.py, or "
"a path to a function definition of the form /path/to/file.py:func"
)
},
)

data_collator: Callable[[Any], Any] = field(
default_factory=lambda: DefaultDataCollator(),
metadata={"help": "The function to used to form a batch from the dataset"},
)

dvc_data_repository: Optional[str] = field(
default=None,
metadata={"help": "Path to repository used for dvc_dataset_path"},
)
12 changes: 5 additions & 7 deletions src/llmcompressor/args/model_arguments.py
Original file line number Diff line number Diff line change
@@ -1,24 +1,26 @@
from dataclasses import dataclass, field
from typing import Optional

from llmcompressor.typing import ModelInput, RecipeInput


@dataclass
class ModelArguments:
"""
Model variables used for oneshot calibration, finetuning and
stage runners (sequential run of oneshot and finetune).

"""

model: str = field(
model: ModelInput = field(
metadata={
"help": (
"A pretrained model or a string as a path to pretrained model, "
"HF stub, or model identifier from huggingface.co/models."
)
},
)
distill_teacher: Optional[str] = field(
recipe: RecipeInput = field(metadata={"help": ""})
distill_teacher: ModelInput = field(
default=None,
metadata={
"help": "Teacher model (a trained text generation model)",
Expand Down Expand Up @@ -79,10 +81,6 @@ class ModelArguments:
default=True,
metadata={"help": "Whether to compress sparse models during save"},
)
oneshot_device: Optional[str] = field(
default="cuda:0",
metadata={"help": "Device to run oneshot calibration on"},
)
model_revision: str = field(
default="main",
metadata={
Expand Down
16 changes: 16 additions & 0 deletions src/llmcompressor/args/post_train_arguments.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
from dataclasses import dataclass, field
from typing import Optional

import torch


@dataclass
class PostTrainArguments:
pipeline: Optional[str] = field(
default=None,
metadata={"help": "Calibration pipeline used to calibrate model."},
)

oneshot_device: Optional[torch.device] = field(default=None)

output_dir: Optional[str] = field(default=None)
32 changes: 0 additions & 32 deletions src/llmcompressor/args/recipe_arguments.py

This file was deleted.

9 changes: 3 additions & 6 deletions src/llmcompressor/args/training_arguments.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,9 @@ class TrainingArguments(HFTrainingArgs):

"""

do_oneshot: Optional[bool] = field(
default=False,
metadata={"help": "Whether to run one-shot calibration in stages"},
)
run_stages: Optional[bool] = field(
default=False, metadata={"help": "Whether to trigger recipe stage by stage"}
max_seq_length: Optional[int] = field(
default=512,
metadata={"help": "The maximum sequence length to use during training"},
)
output_dir: str = field(
default="./output",
Expand Down
73 changes: 0 additions & 73 deletions src/llmcompressor/args/utils.py

This file was deleted.

Loading
Loading