[2026-06-13 16:40:45,849] [DEBUG] [axolotl.utils.config.resolve_dtype:74] [PID:590] bf16 support detected, enabling for this configuration. [2026-06-13 16:40:46,071] [DEBUG] [axolotl.utils.config.log_gpu_memory_usage:127] [PID:590] baseline 0.000GB () [2026-06-13 16:40:46,071] [INFO] [axolotl.cli.config.load_cfg:333] [PID:590] config: { "activation_offloading": true, "adapter": "qlora", "attn_implementation": "flash_attention_2", "attn_needs_dtype_cast": true, "attn_supports_packing": true, "attn_uses_flash_lib": true, "axolotl_config_path": "./configs/jacob/jacob-micro-light.yaml", "base_model": "Qwen/Qwen3.5-4B", "base_model_config": "Qwen/Qwen3.5-4B", "batch_size": 8, "bf16": true, "capabilities": { "bf16": true, "compute_capability": "sm_89", "fp8": false, "n_gpu": 1, "n_node": 1, "tf32": true }, "chat_template": "qwen3_5", "context_parallel_size": 1, "cut_cross_entropy": true, "dataloader_num_workers": 1, "dataloader_pin_memory": true, "dataloader_prefetch_factor": 256, "dataset_num_proc": 16, "datasets": [ { "chat_template": "tokenizer_default", "field_messages": "messages", "field_tools": "tools", "message_property_mappings": { "content": "content", "role": "role" }, "path": "jacob-ml/Jacob-2-SSFT-filtered", "split": "train", "trust_remote_code": false, "type": "chat_template" } ], "ddp": false, "device": "cuda:0", "dion_rank_fraction": 1.0, "dion_rank_multiple_of": 1, "eaft_alpha": 1.0, "eaft_k": 20, "env_capabilities": { "torch_version": "2.9.1" }, "eval_batch_size": 1, "eval_causal_lm_metrics": [ "sacrebleu", "comet", "ter", "chrf" ], "eval_max_new_tokens": 128, "eval_table_size": 0, "experimental_skip_move_to_device": true, "fp16": false, "freeze_mm_modules": true, "generate_samples": false, "generation_do_sample": true, "generation_max_new_tokens": 50, "generation_prompt_ratio": 0.5, "generation_temperature": 0.7, "gradient_accumulation_steps": 8, "gradient_checkpointing": true, "gradient_checkpointing_kwargs": { "use_reentrant": true }, "hub_model_id": "jacob-ml/Jacob-2-4B", "include_tkps": true, "is_multimodal": true, "layer_offloading": true, "learning_rate": 0.0002, "liger_fused_linear_cross_entropy": true, "liger_glu_activation": true, "liger_layer_norm": true, "liger_rms_norm": true, "liger_rope": true, "lisa_layers_attribute": "model.layers", "load_best_model_at_end": false, "load_in_4bit": true, "load_in_8bit": false, "local_rank": 0, "logging_steps": 1, "lora_alpha": 16, "lora_dropout": 0.0, "lora_embedding_kernel": true, "lora_mlp_kernel": true, "lora_o_kernel": true, "lora_qkv_kernel": true, "lora_r": 8, "lora_target_modules": "model\\.language_model\\.layers\\.[\\d]+\\.(_checkpoint_wrapped_module\\.)?(mlp|self_attn)\\.(up|down|gate|q|k|v|o)_proj", "loraplus_lr_embedding": 1e-06, "lr_scheduler": "cosine", "mean_resizing_embeddings": false, "merge_method": "memory_efficient", "micro_batch_size": 1, "model_config_type": "qwen3_5", "model_config_type_text": "qwen3_5_text", "num_epochs": 1.0, "num_generation_samples": 3, "optimizer": "adamw_torch_8bit", "otel_metrics_host": "localhost", "otel_metrics_port": 8000, "output_dir": "./outputs/Jacob-2-4B", "pad_to_sequence_len": false, "plugins": [ "axolotl.integrations.cut_cross_entropy.CutCrossEntropyPlugin", "axolotl.integrations.liger.LigerPlugin" ], "pretrain_multipack_attn": true, "processor_config": "Qwen/Qwen3.5-4B", "profiler_steps_start": 0, "qlora_sharded_model_loading": false, "quantize_moe_experts": false, "ray_num_workers": 1, "relora_prune_method": "magnitude", "remove_unused_columns": true, "resources_per_worker": { "GPU": 1 }, "sample_packing": false, "sample_packing_bin_size": 200, "sample_packing_group_size": 100000, "save_only_model": false, "save_safetensors": true, "sequence_len": 4096, "shuffle_before_merging_datasets": false, "shuffle_merged_datasets": true, "skip_prepare_dataset": false, "streaming_multipack_buffer_size": 10000, "strict": false, "tensor_parallel_size": 1, "tf32": false, "tiled_mlp_use_original_mlp": true, "tokenizer_config": "Qwen/Qwen3.5-4B", "tokenizer_save_jinja_files": true, "torch_dtype": "torch.bfloat16", "train_on_inputs": false, "trl": { "async_prefetch": false, "log_completions": false, "mask_truncated_completions": false, "ref_model_mixup_alpha": 0.9, "ref_model_sync_steps": 64, "replay_buffer_size": 0, "replay_recompute_logps": true, "reroll_max_groups": 1, "reroll_start_fraction": 1.0, "reward_num_workers": 1, "scale_rewards": true, "skip_zero_advantage_batches": true, "sync_ref_model": false, "use_data_producer": false, "use_vllm": false, "vllm_lora_sync": false, "vllm_server_host": "0.0.0.0", "vllm_server_port": 8000 }, "use_otel_metrics": false, "use_ray": false, "val_set_size": 0.0, "vllm": { "device": "auto", "dtype": "auto", "gpu_memory_utilization": 0.9, "host": "0.0.0.0", "port": 8000 }, "warmup_ratio": 0.1, "weight_decay": 0.0, "world_size": 1 } [2026-06-13 16:40:47,917] [DEBUG] [axolotl.loaders.tokenizer.load_tokenizer:311] [PID:590] EOS: 248046 / <|im_end|> [2026-06-13 16:40:47,917] [DEBUG] [axolotl.loaders.tokenizer.load_tokenizer:312] [PID:590] BOS: None / None [2026-06-13 16:40:47,917] [DEBUG] [axolotl.loaders.tokenizer.load_tokenizer:313] [PID:590] PAD: 248044 / <|endoftext|> [2026-06-13 16:40:47,917] [DEBUG] [axolotl.loaders.tokenizer.load_tokenizer:314] [PID:590] UNK: None / None [2026-06-13 16:40:47,917] [INFO] [axolotl.utils.data.shared.load_preprocessed_dataset:482] [PID:590] Unable to find prepared dataset in last_run_prepared/df1a8767edaa54a3b07747a0b1ec1c3a [2026-06-13 16:40:47,918] [INFO] [axolotl.utils.data.sft._load_raw_datasets:320] [PID:590] Loading raw datasets... [2026-06-13 16:40:47,918] [WARNING] [axolotl.utils.data.sft._load_raw_datasets:322] [PID:590] Processing datasets during training can lead to VRAM instability. Please pre-process your dataset using `axolotl preprocess path/to/config.yml`. Downloading (incomplete total...): 0.00B [00:00, ?B/s] Fetching 0 files: 0it [00:00, ?it/s] Fetching 0 files: 0it [00:00, ?it/s] Download complete: : 0.00B [00:00, ?B/s] Download complete: : 0.00B [00:00, ?B/s] [2026-06-13 16:40:49,854] [INFO] [axolotl.utils.data.wrappers.get_dataset_wrapper:87] [PID:590] Loading dataset: jacob-ml/Jacob-2-SSFT-filtered with base_type: chat_template and prompt_style: None [2026-06-13 16:40:49,856] [INFO] [axolotl.prompt_strategies.chat_template.__call__:1191] [PID:590] Using chat template: --- {%- if tools %} {{- '<|im_start|>system\n' }} {%- if messages[0].role == 'system' %} {%- if messages[0].content is string %} {{- messages[0].content + '\n\n' }} {%- else %} {%- for part in messages[0].content %} {%- if part is mapping %} {%- set system_text = part.get('text') or part.get('content') or part.get('value') %} {%- if system_text %}{{- system_text }}{%- endif %} {%- elif part is string %} {{- part }} {%- endif %} {%- endfor %} {{- '\n\n' }} {%- endif %} {%- endif %} {{- "# Tools\n\nYou may call one or more functions to assist with the user query.\n\nYou are provided with function signatures within XML tags:\n" }} {%- for tool in tools %} {{- "\n" }} {{- tool | tojson }} {%- endfor %} {{- "\n\n\nFor each function call, return a json object with function name and arguments within XML tags:\n\n{\"name\": , \"arguments\": }\n<|im_end|>\n" }} {%- else %} {%- if messages[0].role == 'system' %} {%- if messages[0].content is string %} {{- '<|im_start|>system\n' + messages[0].content + '<|im_end|>\n' }} {%- else %} {{- '<|im_start|>system\n' }} {%- for part in messages[0].content %} {%- if part is mapping %} {%- set system_text = part.get('text') or part.get('content') or part.get('value') %} {%- if system_text %}{{- system_text }}{%- endif %} {%- elif part is string %} {{- part }} {%- endif %} {%- endfor %} {{- '<|im_end|>\n' }} {%- endif %} {%- endif %} {%- endif %} {%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %} {#- Determine the real last index: use provided value or default to messages length - 1 #} {%- if real_last_index is defined and real_last_index is not none %} {%- set ns.real_last_index = real_last_index %} {%- else %} {%- set ns.real_last_index = messages|length - 1 %} {%- endif %} {%- for message in messages[::-1] %} {%- set index = (messages|length - 1) - loop.index0 %} {%- if message['content'] is string %} {%- if ns.multi_step_tool and message.role == "user" and not(message.content.startswith('') and message.content.endswith('')) %} {%- set ns.multi_step_tool = false %} {%- set ns.last_query_index = index %} {%- endif %} {%- else %} {%- if ns.multi_step_tool and message.role == "user" %} {%- set ns.multi_step_tool = false %} {%- set ns.last_query_index = index %} {%- endif %} {%- endif %} {%- endfor %} {%- for message in messages %} {%- if (message.role == "user") or (message.role == "system" and not loop.first) %} {{- '<|im_start|>' + message.role + '\n' }} {%- if message['content'] is string %} {{- message.content }} {%- else %} {%- for content in message['content'] %} {%- if content['type'] == 'image' or 'image' in content or 'image_url' in content %} {{- '<|vision_start|><|image_pad|><|vision_end|>' }} {%- elif content['type'] == 'video' or 'video' in content %} {{- '<|vision_start|><|video_pad|><|vision_end|>' }} {%- elif 'text' in content %} {{- content['text'] }} {%- endif %} {%- endfor %} {%- endif %} {{- '<|im_end|>\n' }} {%- elif message.role == "assistant" %} {%- if message['content'] is string %} {%- set content = message.content %} {%- else %} {%- set content = '' %} {%- for item in message['content'] %} {%- if 'text' in item %} {%- set content = content + item['text'] %} {%- endif %} {%- endfor %} {%- endif %} {%- set reasoning_content = '' %} {%- if message.reasoning_content is defined and message.reasoning_content is not none %} {%- set reasoning_content = message.reasoning_content %} {%- else %} {%- if '' in content %} {%- set content = content.split('')[-1].lstrip('\n') %} {%- set reasoning_content = content.split('')[0].rstrip('\n').split('')[-1].lstrip('\n') %} {%- endif %} {%- endif %} {%- if loop.index0 > ns.last_query_index %} {%- if loop.index0 == ns.real_last_index or (loop.index0 != ns.real_last_index and reasoning_content) %} {{- '<|im_start|>' + message.role + '\n\n' + reasoning_content.strip('\n') + '\n\n\n' + content.lstrip('\n') }} {%- else %} {{- '<|im_start|>' + message.role + '\n' + content }} {%- endif %} {%- else %} {{- '<|im_start|>' + message.role + '\n' + content }} {%- endif %} {%- if message.tool_calls %} {%- for tool_call in message.tool_calls %} {%- if (loop.first and content) or (not loop.first) %} {{- '\n' }} {%- endif %} {%- if tool_call.function %} {%- set tool_call = tool_call.function %} {%- endif %} {{- '\n{"name": "' }} {{- tool_call.name }} {{- '", "arguments": ' }} {%- if tool_call.arguments is string %} {{- tool_call.arguments }} {%- else %} {{- tool_call.arguments | tojson }} {%- endif %} {{- '}\n' }} {%- endfor %} {%- endif %} {{- '<|im_end|>\n' }} {%- elif message.role == "tool" %} {%- if loop.first or (messages[loop.index0 - 1].role != "tool") %} {{- '<|im_start|>user' }} {%- endif %} {{- '\n\n' }} {{- message.content }} {{- '\n' }} {%- if loop.last or (messages[loop.index0 + 1].role != "tool") %} {{- '<|im_end|>\n' }} {%- endif %} {%- endif %} {%- endfor %} {%- if add_generation_prompt %} {{- '<|im_start|>assistant\n' }} {%- if enable_thinking is defined and enable_thinking is false %} {{- '\n\n\n\n' }} {%- else %} {{- '\n\n' }} {%- endif %} {%- endif %} --- Tokenizing Prompts (num_proc=16): 0%| | 0/4209 [00:004096) (num_proc=16): 0%| | 0/4209 [00:004096) (num_proc=16): 6%|█████████▏ | 263/4209 [00:00<00:06, 626.42 examples/s] Dropping Invalid Sequences (4096) (num_proc=16): 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 4209/4209 [00:00<00:00, 7549.19 examples/s] [2026-06-13 16:41:00,642] [INFO] [axolotl.utils.data.utils._drop_outside_range:306] [PID:590] Dropped 175 sequences outside valid range ([None, 4096]) Saving the dataset (0/15 shards): 0%| | 0/4034 [00:00 [2026-06-13 16:41:10,732] [DEBUG] [axolotl.loaders.tokenizer.load_tokenizer:312] [PID:590] BOS: None / None [2026-06-13 16:41:10,732] [DEBUG] [axolotl.loaders.tokenizer.load_tokenizer:313] [PID:590] PAD: 248044 / <|endoftext|> [2026-06-13 16:41:10,733] [DEBUG] [axolotl.loaders.tokenizer.load_tokenizer:314] [PID:590] UNK: None / None [2026-06-13 16:41:14,967] [DEBUG] [axolotl.train.setup_model_and_tokenizer:81] [PID:590] Loading model [2026-06-13 16:41:15,111] [DEBUG] [axolotl.monkeypatch.torchao_optim.patch_torchao_optim_state_8bit:75] [PID:590] Patched OptimState8bit for torch.compile compatibility [2026-06-13 16:41:15,111] [DEBUG] [axolotl.monkeypatch.torchao_optim.patch_torchao_optim_state_8bit:122] [PID:590] Patched OptimState4bit for torch.compile compatibility [2026-06-13 16:41:15,111] [DEBUG] [axolotl.monkeypatch.torchao_optim.patch_torchao_optim_state_8bit:154] [PID:590] Patched OptimStateFp8 for torch.compile compatibility [2026-06-13 16:41:15,114] [DEBUG] [axolotl.monkeypatch.transformers.trainer_loss_calc.patch_evaluation_loop:94] [PID:590] Patched Trainer.evaluation_loop with nanmean loss calculation [2026-06-13 16:41:15,115] [DEBUG] [axolotl.monkeypatch.transformers.trainer_loss_calc.patch_maybe_log_save_evaluate:148] [PID:590] Patched Trainer._maybe_log_save_evaluate with nanmean loss calculation [2026-06-13 16:41:15,363] [INFO] [axolotl.monkeypatch.models.qwen3_5.modeling.patch_qwen3_5_vlm_flash_attention:289] [PID:590] Applied Qwen3.5 VLM flash-attention patch (3-D MRoPE position_ids) [2026-06-13 16:41:15,518] [INFO] [axolotl.monkeypatch.lora_kernels.patch_self_attn_lora:364] [PID:590] Patched attention class with LoRA optims: Qwen3_5Attention [2026-06-13 16:41:15,532] [INFO] [axolotl.integrations.cut_cross_entropy.pre_model_load:94] [PID:590] Applying Cut Cross Entropy to model type: qwen3_5 Loading weights: 0%| | 0/723 [00:00