Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
14 changes: 14 additions & 0 deletions documentation/OPTIONS.es.md
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,20 @@ Donde `foo` es tu entorno de configuración; o simplemente usa `config/config.js
- **Qué**: Aplica reemplazos RamTorch a las capas Linear de ControlNet cuando se entrena un ControlNet.
- **Predeterminado**: `False`

### `--ramtorch_transformer_percent`

- **Qué**: Porcentaje (0-100) de capas Linear del transformer a descargar con RamTorch.
- **Predeterminado**: `100` (todas las capas elegibles)
- **Por qué**: Permite una descarga parcial para equilibrar el ahorro de VRAM con el rendimiento. Valores más bajos mantienen más capas en la GPU para un entrenamiento más rápido, mientras se reduce el uso de memoria.
- **Notas**: Las capas se seleccionan desde el inicio del orden de recorrido del módulo. Se puede combinar con `--ramtorch_target_modules`.

### `--ramtorch_text_encoder_percent`

- **Qué**: Porcentaje (0-100) de capas Linear del codificador de texto a descargar con RamTorch.
- **Predeterminado**: `100` (todas las capas elegibles)
- **Por qué**: Permite la descarga parcial de codificadores de texto cuando `--ramtorch_text_encoder` está habilitado.
- **Notas**: Solo aplica cuando `--ramtorch_text_encoder` está habilitado.

### `--pretrained_model_name_or_path`

- **Qué**: Ruta al modelo preentrenado o su identificador en <https://huggingface.co/models>.
Expand Down
14 changes: 14 additions & 0 deletions documentation/OPTIONS.hi.md
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,20 @@ simpletuner configure config/foo/config.json
- **What**: ControlNet training के दौरान ControlNet Linear layers पर RamTorch replacements लागू करता है।
- **Default**: `False`

### `--ramtorch_transformer_percent`

- **What**: RamTorch के साथ offload करने के लिए transformer Linear layers का प्रतिशत (0-100)।
- **Default**: `100` (सभी eligible layers)
- **Why**: VRAM बचत और performance के बीच संतुलन के लिए partial offloading की अनुमति देता है। कम values GPU पर अधिक layers रखती हैं जिससे training तेज होती है जबकि memory usage भी कम होती है।
- **Notes**: Layers module traversal order की शुरुआत से select की जाती हैं। `--ramtorch_target_modules` के साथ combine किया जा सकता है।

### `--ramtorch_text_encoder_percent`

- **What**: RamTorch के साथ offload करने के लिए text encoder Linear layers का प्रतिशत (0-100)।
- **Default**: `100` (सभी eligible layers)
- **Why**: जब `--ramtorch_text_encoder` enabled हो तब text encoders की partial offloading की अनुमति देता है।
- **Notes**: केवल तब लागू होता है जब `--ramtorch_text_encoder` enabled हो।

### `--pretrained_model_name_or_path`

- **What**: pretrained model का path या <https://huggingface.co/models> से उसका identifier.
Expand Down
14 changes: 14 additions & 0 deletions documentation/OPTIONS.ja.md
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,20 @@ simpletuner configure config/foo/config.json
- **内容**: ControlNet を学習する際、ControlNet の Linear レイヤーに RamTorch 置換を適用。
- **既定**: `False`

### `--ramtorch_transformer_percent`

- **内容**: RamTorch でオフロードする transformer Linear レイヤーの割合(0-100)。
- **既定**: `100`(対象となるすべてのレイヤー)
- **理由**: 部分的なオフロードにより、VRAM 節約とパフォーマンスのバランスを取ることができます。低い値はより多くのレイヤーを GPU に保持し、メモリ使用量を削減しながら高速な学習を可能にします。
- **注記**: レイヤーはモジュール走査順の先頭から選択されます。`--ramtorch_target_modules` と組み合わせ可能。

### `--ramtorch_text_encoder_percent`

- **内容**: RamTorch でオフロードするテキストエンコーダー Linear レイヤーの割合(0-100)。
- **既定**: `100`(対象となるすべてのレイヤー)
- **理由**: `--ramtorch_text_encoder` 有効時にテキストエンコーダーの部分的なオフロードを可能にします。
- **注記**: `--ramtorch_text_encoder` が有効な場合のみ適用。

### `--pretrained_model_name_or_path`

- **内容**: 事前学習済みモデルのパス、または <https://huggingface.co/models> の識別子。
Expand Down
14 changes: 14 additions & 0 deletions documentation/OPTIONS.md
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,20 @@ Where `foo` is your config environment - or just use `config/config.json` if you
- **What**: Applies RamTorch replacements to ControlNet Linear layers when training a ControlNet.
- **Default**: `False`

### `--ramtorch_transformer_percent`

- **What**: Percentage (0-100) of transformer Linear layers to offload with RamTorch.
- **Default**: `100` (all eligible layers)
- **Why**: Allows partial offloading to balance VRAM savings against performance. Lower values keep more layers on GPU for faster training while still reducing memory usage.
- **Notes**: Layers are selected from the beginning of module traversal order. Can be combined with `--ramtorch_target_modules`.

### `--ramtorch_text_encoder_percent`

- **What**: Percentage (0-100) of text encoder Linear layers to offload with RamTorch.
- **Default**: `100` (all eligible layers)
- **Why**: Allows partial offloading of text encoders when `--ramtorch_text_encoder` is enabled.
- **Notes**: Only applies when `--ramtorch_text_encoder` is enabled.

### `--pretrained_model_name_or_path`

- **What**: Path to the pretrained model or its identifier from <https://huggingface.co/models>.
Expand Down
14 changes: 14 additions & 0 deletions documentation/OPTIONS.pt-BR.md
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,20 @@ Onde `foo` e seu ambiente de config — ou use `config/config.json` se nao estiv
- **O que**: Aplica substituicoes RamTorch a camadas Linear do ControlNet ao treinar um ControlNet.
- **Padrao**: `False`

### `--ramtorch_transformer_percent`

- **O que**: Porcentagem (0-100) de camadas Linear do transformer a serem descarregadas com RamTorch.
- **Padrao**: `100` (todas as camadas elegiveis)
- **Por que**: Permite descarregamento parcial para equilibrar economia de VRAM com desempenho. Valores mais baixos mantem mais camadas na GPU para treinamento mais rapido, enquanto ainda reduz o uso de memoria.
- **Notas**: As camadas sao selecionadas desde o inicio da ordem de travessia do modulo. Pode ser combinado com `--ramtorch_target_modules`.

### `--ramtorch_text_encoder_percent`

- **O que**: Porcentagem (0-100) de camadas Linear do codificador de texto a serem descarregadas com RamTorch.
- **Padrao**: `100` (todas as camadas elegiveis)
- **Por que**: Permite descarregamento parcial de codificadores de texto quando `--ramtorch_text_encoder` esta habilitado.
- **Notas**: Aplica-se apenas quando `--ramtorch_text_encoder` esta habilitado.

### `--pretrained_model_name_or_path`

- **O que**: Caminho para o modelo pre-treinado ou seu identificador em <https://huggingface.co/models>.
Expand Down
14 changes: 14 additions & 0 deletions documentation/OPTIONS.zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,20 @@ simpletuner configure config/foo/config.json
- **内容**:训练 ControlNet 时对其 Linear 层应用 RamTorch 替换。
- **默认**:`False`

### `--ramtorch_transformer_percent`

- **内容**:使用 RamTorch 卸载的 transformer Linear 层的百分比(0-100)。
- **默认**:`100`(所有符合条件的层)
- **原因**:允许部分卸载以平衡显存节省与性能。较低的值保留更多层在 GPU 上以加快训练,同时仍减少内存使用。
- **说明**:层按模块遍历顺序从头开始选择。可与 `--ramtorch_target_modules` 结合使用。

### `--ramtorch_text_encoder_percent`

- **内容**:使用 RamTorch 卸载的文本编码器 Linear 层的百分比(0-100)。
- **默认**:`100`(所有符合条件的层)
- **原因**:当启用 `--ramtorch_text_encoder` 时,允许部分卸载文本编码器。
- **说明**:仅在启用 `--ramtorch_text_encoder` 时适用。

### `--pretrained_model_name_or_path`

- **内容**:预训练模型路径或 <https://huggingface.co/models> 上的标识符。
Expand Down
2 changes: 1 addition & 1 deletion simpletuner/helpers/models/ace_step/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -346,7 +346,7 @@ def load_text_encoder(self, move_to_device: bool = True):
text_encoder.to(self.accelerator.device, dtype=self.config.weight_dtype)

if self._ramtorch_text_encoders_requested():
self._apply_ramtorch_layers(text_encoder, "text_encoder_1")
self._apply_ramtorch_layers(text_encoder, "text_encoder_1", percent=self._ramtorch_text_encoder_percent())

self.text_encoders = [text_encoder]
self.text_encoder_1 = text_encoder
Expand Down
27 changes: 25 additions & 2 deletions simpletuner/helpers/models/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -2139,7 +2139,12 @@ def load_text_encoder(self, move_to_device: bool = True):

if self._ramtorch_text_encoders_requested():
# Use full ramtorch for text encoders - all layer types stream from CPU
self._apply_ramtorch_layers(text_encoder, f"text_encoder_{text_encoder_idx}", full_ramtorch=True)
self._apply_ramtorch_layers(
text_encoder,
f"text_encoder_{text_encoder_idx}",
full_ramtorch=True,
percent=self._ramtorch_text_encoder_percent(),
)

if (
move_to_device
Expand Down Expand Up @@ -2562,7 +2567,7 @@ def _load_model(load_kwargs: dict):
"All model parameters remain on the meta device after reload."
)
if self._ramtorch_enabled() and self.model is not None:
self._apply_ramtorch_layers(self.model, self.MODEL_TYPE.value)
self._apply_ramtorch_layers(self.model, self.MODEL_TYPE.value, percent=self._ramtorch_transformer_percent())
if move_to_device and self.model is not None:
self.model.to(self.accelerator.device, dtype=self.config.weight_dtype)

Expand Down Expand Up @@ -3006,13 +3011,28 @@ def _ramtorch_targets_for_component(self, override: Optional[list[str]] = None)
return override
return self._ramtorch_targets()

def _ramtorch_transformer_percent(self) -> Optional[float]:
"""Get the percentage of transformer Linear layers to offload (0-100)."""
percent = getattr(self.config, "ramtorch_transformer_percent", None)
if percent is None:
return None
return float(percent) if percent < 100 else None

def _ramtorch_text_encoder_percent(self) -> Optional[float]:
"""Get the percentage of text encoder Linear layers to offload (0-100)."""
percent = getattr(self.config, "ramtorch_text_encoder_percent", None)
if percent is None:
return None
return float(percent) if percent < 100 else None

def _apply_ramtorch_layers(
self,
module,
component_label: str,
*,
target_patterns: Optional[list[str]] = None,
full_ramtorch: bool = False,
percent: Optional[float] = None,
) -> int:
"""
Apply RamTorch to a module's layers.
Expand All @@ -3023,6 +3043,7 @@ def _apply_ramtorch_layers(
target_patterns: Optional patterns to filter which Linear layers to convert.
full_ramtorch: If True, convert all supported layer types (Linear, Embedding,
Conv, LayerNorm) to bouncing versions. If False, only Linear.
percent: Optional percentage (0-100) of eligible Linear layers to replace.
"""
if module is None or not self._ramtorch_enabled():
return 0
Expand All @@ -3037,6 +3058,7 @@ def _apply_ramtorch_layers(
include_embedding=True,
include_conv=True,
include_layernorm=True,
percent=percent,
)
total = counts.get("linear", 0) + counts.get("other", 0)
if total:
Expand Down Expand Up @@ -3064,6 +3086,7 @@ def _apply_ramtorch_layers(
device=self._ramtorch_device(),
target_patterns=self._ramtorch_targets_for_component(target_patterns),
name_prefix=component_label,
percent=percent,
)
if replaced:
logger.info("Applied RamTorch to %s Linear layers on %s.", replaced, component_label)
Expand Down
4 changes: 2 additions & 2 deletions simpletuner/helpers/models/flux2/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -414,7 +414,7 @@ def _load_text_encoder_qwen3(self, move_to_device: bool = True):
)
self._qwen_model.to(target_device, dtype=dtype)
if self._ramtorch_text_encoders_requested():
self._apply_ramtorch_layers(self._qwen_model, "text_encoder_1")
self._apply_ramtorch_layers(self._qwen_model, "text_encoder_1", percent=self._ramtorch_text_encoder_percent())
self._qwen_model.requires_grad_(False)
self._qwen_model.eval()

Expand Down Expand Up @@ -465,7 +465,7 @@ def _load_text_encoder_mistral(self, move_to_device: bool = True):
)
self._mistral_model.to(target_device, dtype=dtype)
if self._ramtorch_text_encoders_requested():
self._apply_ramtorch_layers(self._mistral_model, "text_encoder_1")
self._apply_ramtorch_layers(self._mistral_model, "text_encoder_1", percent=self._ramtorch_text_encoder_percent())
self._mistral_model.requires_grad_(False)
self._mistral_model.eval()

Expand Down
4 changes: 2 additions & 2 deletions simpletuner/helpers/models/hunyuanvideo/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ def load_text_encoder(self, move_to_device: bool = True):
if move_to_device and not self._ramtorch_text_encoders_requested():
text_encoder = text_encoder.to(device)
if self._ramtorch_text_encoders_requested():
self._apply_ramtorch_layers(text_encoder, "text_encoder_1")
self._apply_ramtorch_layers(text_encoder, "text_encoder_1", percent=self._ramtorch_text_encoder_percent())

glyph_repo = getattr(self.config, "glyph_byt5_repo", self.GLYPH_BYT5_REPO)
fallback_glyph_repo = getattr(self.config, "glyph_byt5_fallback_repo", "google/byt5-small")
Expand Down Expand Up @@ -306,7 +306,7 @@ def load_text_encoder(self, move_to_device: bool = True):
if move_to_device and not self._ramtorch_text_encoders_requested():
byt5_model = byt5_model.to(device)
if self._ramtorch_text_encoders_requested():
self._apply_ramtorch_layers(byt5_model, "text_encoder_2")
self._apply_ramtorch_layers(byt5_model, "text_encoder_2", percent=self._ramtorch_text_encoder_percent())

self.text_encoder = text_encoder
self.tokenizer = tokenizer
Expand Down
2 changes: 1 addition & 1 deletion simpletuner/helpers/models/ltxvideo2/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -534,7 +534,7 @@ def load_model(self, move_to_device: bool = True):
raise RuntimeError("LTX-2 transformer parameters remain on the meta device after loading.")

if self._ramtorch_enabled() and self.model is not None:
self._apply_ramtorch_layers(self.model, self.MODEL_TYPE.value)
self._apply_ramtorch_layers(self.model, self.MODEL_TYPE.value, percent=self._ramtorch_transformer_percent())
if move_to_device and self.model is not None:
self.model.to(self.accelerator.device, dtype=self.config.weight_dtype)

Expand Down
Loading