See axolotl config
axolotl version: 0.13.0.dev0
base_model: ./gpt-oss-20b
use_kernels: false
model_quantization_config: Mxfp4Config
model_quantization_config_kwargs:
dequantize: true
plugins:
- axolotl.integrations.cut_cross_entropy.CutCrossEntropyPlugin
experimental_skip_move_to_device: true # prevent OOM by NOT putting model to GPU before sharding
unfrozen_parameters:
- \S+self_attn\S+
chat_template: jinja
chat_template_jinja: |-
{#- System Message Construction ============================================ #}
{%- macro build_system_message() -%}
{%- if model_identity is not defined %}
{{- raise_exception("Missing model_identity") }}
{%- endif %}
{{- model_identity + "
" }}
{{- "Knowledge cutoff: 2024-06
" }}
{%- if reasoning_effort is not defined %}
{%- set reasoning_effort = "low" %}
{%- endif %}
{{- "Reasoning: " + reasoning_effort + "
" }}
{%- endmacro -%}
{#- Main Template Logic ================================================= #}
{#- Set defaults #}
{#- Render system message #}
{%- set model_identity = messages[0].content %}
{{- "<|start|>system<|message|>" }}
{{- build_system_message() }}
{{- "<|end|>" }}
{#- Extract developer message #}
{%- set developer_message = messages[1].content %}
{%- set loop_messages = messages[2:] %}
{#- Render developer message #}
{%- if developer_message %}
{{- "<|start|>developer<|message|>" }}
{%- if developer_message %}
{{- "# Instructions
" }}
{{- developer_message }}
{{- "
" }}
{%- endif %}
{{- "<|end|>" }}
{%- endif %}
{#- Render messages #}
{%- set last_tool_call = namespace(name=none) %}
{%- for message in loop_messages -%}
{#- At this point only assistant/user messages should remain #}
{%- if message.role == 'assistant' -%}
{#- Checks to ensure the messages are being passed in the format we expect #}
{%- if "content" in message %}
{%- if "<|channel|>analysis<|message|>" in message.content or "<|channel|>final<|message|>" in message.content %}
{{- raise_exception("You have passed a message containing <|channel|> tags in the content field. Instead of doing this, you should pass analysis messages (the string between '<|message|>' and '<|end|>') in the 'thinking' field, and final messages (the string between '<|message|>' and '<|end|>') in the 'content' field.") }}
{%- endif %}
{%- endif %}
{%- if "thinking" in message %}
{%- if "<|channel|>analysis<|message|>" in message.thinking or "<|channel|>final<|message|>" in message.thinking %}
{{- raise_exception("You have passed a message containing <|channel|> tags in the thinking field. Instead of doing this, you should pass analysis messages (the string between '<|message|>' and '<|end|>') in the 'thinking' field, and final messages (the string between '<|message|>' and '<|end|>') in the 'content' field.") }}
{%- endif %}
{%- endif %}
{%- if loop.last and not add_generation_prompt %}
{#- Only render the CoT if the final turn is an assistant turn and add_generation_prompt is false #}
{#- This is a situation that should only occur in training, never in inference. #}
{%- if "thinking" in message %}
{{- "<|channel|>analysis<|message|>" + message.thinking + "<|end|>" }}
{%- endif %}
{#- <|return|> indicates the end of generation, but <|end|> does not #}
{#- <|return|> should never be an input to the model, but we include it as the final token #}
{#- when training, so the model learns to emit it. #}
{{- "<|channel|>final<|message|>" + message.content + "<|return|>" }}
{%- else %}
{#- CoT is dropped during all previous turns, so we never render it for inference #}
{{- "<|channel|>final<|message|>" + message.content + "<|end|>" }}
{%- set last_tool_call.name = none %}
{%- endif %}
{%- elif message.role == 'user' -%}
{{- "<|start|>user<|message|>" + message.content + "<|end|><|start|>assistant" }}
{%- endif -%}
{%- endfor -%}
datasets:
- path: AlexHung29629/mbpii2
type: chat_template
dataset_prepared_path: last_run_prepared
val_set_size: 0.05
output_dir: ./outputs/gpt-oss-v3
dataloader_num_workers: 0
dataloader_pin_memory: True
sequence_len: 16384
sample_packing: true
eval_sample_packing: false
remove_unused_columns: false
pad_to_sequence_len: true
wandb_project: mb_pii
wandb_name: v3
tensorboard: true
gradient_accumulation_steps: 1
micro_batch_size: 1
num_epochs: 2
optimizer: adamw_torch_fused
lr_scheduler: constant_with_warmup
learning_rate: 2e-6
save_only_model: true
bf16: true
tf32: true
#flash_attention: true
eager_attention: true
#sdp_attention: true
#attn_implementation: kernels-community/vllm-flash-attn3
#flex_attention: true
#flex_attn_compile_kwargs:
# dynamic: false
# mode: max-autotune-no-cudagraphs
torch_compile: true
#gradient_checkpointing: true
#activation_offloading: true
logging_steps: 1
saves_per_epoch: 1
warmup_ratio: 0.05
special_tokens:
eot_tokens:
- "<|end|>"
- "<|return|>"
fsdp_version: 2
fsdp_config:
offload_params: false
state_dict_type: FULL_STATE_DICT
auto_wrap_policy: TRANSFORMER_BASED_WRAP
transformer_layer_cls_to_wrap: GptOssDecoderLayer
reshard_after_forward: true
activation_checkpointing: true
outputs/gpt-oss-v3
This model was trained from scratch on the AlexHung29629/mbpii2 dataset.
Model description
More information needed
Intended uses & limitations
More information needed
Training and evaluation data
More information needed
Training procedure
Training hyperparameters
The following hyperparameters were used during training:
- learning_rate: 2e-06
- train_batch_size: 1
- eval_batch_size: 1
- seed: 42
- distributed_type: multi-GPU
- num_devices: 8
- total_train_batch_size: 8
- total_eval_batch_size: 8
- optimizer: Use OptimizerNames.ADAMW_TORCH_FUSED with betas=(0.9,0.999) and epsilon=1e-08 and optimizer_args=No additional optimizer arguments
- lr_scheduler_type: constant_with_warmup
- lr_scheduler_warmup_steps: 3
- training_steps: 66
Training results
Framework versions
- Transformers 4.55.0
- Pytorch 2.7.1+cu128
- Datasets 4.0.0
- Tokenizers 0.21.4
- Downloads last month
- -