Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
fengzch-das
nunchaku
Commits
bf3669dd
"vscode:/vscode.git/clone" did not exist on "18b26ec66ce829ec8f51ba1322fd8837331dd41c"
Commit
bf3669dd
authored
Apr 02, 2025
by
sxtyzhangzk
Committed by
Zhekai Zhang
Apr 04, 2025
Browse files
[major] fix runtime error when controlnet is not present
parent
235238bd
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
8 additions
and
5 deletions
+8
-5
src/FluxModel.cpp
src/FluxModel.cpp
+8
-5
No files found.
src/FluxModel.cpp
View file @
bf3669dd
...
@@ -736,8 +736,6 @@ Tensor FluxModel::forward(
...
@@ -736,8 +736,6 @@ Tensor FluxModel::forward(
const
int
img_tokens
=
hidden_states
.
shape
[
1
];
const
int
img_tokens
=
hidden_states
.
shape
[
1
];
const
int
numLayers
=
transformer_blocks
.
size
()
+
single_transformer_blocks
.
size
();
const
int
numLayers
=
transformer_blocks
.
size
()
+
single_transformer_blocks
.
size
();
const
int
num_controlnet_block_samples
=
controlnet_block_samples
.
shape
[
0
];
const
int
num_controlnet_single_block_samples
=
controlnet_single_block_samples
.
shape
[
0
];
Tensor
concat
;
Tensor
concat
;
...
@@ -747,6 +745,8 @@ Tensor FluxModel::forward(
...
@@ -747,6 +745,8 @@ Tensor FluxModel::forward(
auto
&
block
=
transformer_blocks
.
at
(
layer
);
auto
&
block
=
transformer_blocks
.
at
(
layer
);
std
::
tie
(
hidden_states
,
encoder_hidden_states
)
=
block
->
forward
(
hidden_states
,
encoder_hidden_states
,
temb
,
rotary_emb_img
,
rotary_emb_context
,
0.0
f
);
std
::
tie
(
hidden_states
,
encoder_hidden_states
)
=
block
->
forward
(
hidden_states
,
encoder_hidden_states
,
temb
,
rotary_emb_img
,
rotary_emb_context
,
0.0
f
);
if
(
controlnet_block_samples
.
valid
())
{
if
(
controlnet_block_samples
.
valid
())
{
const
int
num_controlnet_block_samples
=
controlnet_block_samples
.
shape
[
0
];
int
interval_control
=
ceilDiv
(
transformer_blocks
.
size
(),
static_cast
<
size_t
>
(
num_controlnet_block_samples
));
int
interval_control
=
ceilDiv
(
transformer_blocks
.
size
(),
static_cast
<
size_t
>
(
num_controlnet_block_samples
));
int
block_index
=
layer
/
interval_control
;
int
block_index
=
layer
/
interval_control
;
// Xlabs ControlNet
// Xlabs ControlNet
...
@@ -770,6 +770,8 @@ Tensor FluxModel::forward(
...
@@ -770,6 +770,8 @@ Tensor FluxModel::forward(
auto
&
block
=
single_transformer_blocks
.
at
(
layer
-
transformer_blocks
.
size
());
auto
&
block
=
single_transformer_blocks
.
at
(
layer
-
transformer_blocks
.
size
());
hidden_states
=
block
->
forward
(
hidden_states
,
temb
,
rotary_emb_single
);
hidden_states
=
block
->
forward
(
hidden_states
,
temb
,
rotary_emb_single
);
if
(
controlnet_single_block_samples
.
valid
())
{
if
(
controlnet_single_block_samples
.
valid
())
{
const
int
num_controlnet_single_block_samples
=
controlnet_single_block_samples
.
shape
[
0
];
int
interval_control
=
ceilDiv
(
single_transformer_blocks
.
size
(),
static_cast
<
size_t
>
(
num_controlnet_single_block_samples
));
int
interval_control
=
ceilDiv
(
single_transformer_blocks
.
size
(),
static_cast
<
size_t
>
(
num_controlnet_single_block_samples
));
int
block_index
=
(
layer
-
transformer_blocks
.
size
())
/
interval_control
;
int
block_index
=
(
layer
-
transformer_blocks
.
size
())
/
interval_control
;
// Xlabs ControlNet
// Xlabs ControlNet
...
@@ -826,10 +828,9 @@ std::tuple<Tensor, Tensor> FluxModel::forward_layer(
...
@@ -826,10 +828,9 @@ std::tuple<Tensor, Tensor> FluxModel::forward_layer(
const
int
txt_tokens
=
encoder_hidden_states
.
shape
[
1
];
const
int
txt_tokens
=
encoder_hidden_states
.
shape
[
1
];
const
int
img_tokens
=
hidden_states
.
shape
[
1
];
const
int
img_tokens
=
hidden_states
.
shape
[
1
];
const
int
num_controlnet_block_samples
=
controlnet_block_samples
.
shape
[
0
];
const
int
num_controlnet_single_block_samples
=
controlnet_single_block_samples
.
shape
[
0
];
if
(
layer
<
transformer_blocks
.
size
()
&&
controlnet_block_samples
.
valid
())
{
if
(
layer
<
transformer_blocks
.
size
()
&&
controlnet_block_samples
.
valid
())
{
const
int
num_controlnet_block_samples
=
controlnet_block_samples
.
shape
[
0
];
int
interval_control
=
ceilDiv
(
transformer_blocks
.
size
(),
static_cast
<
size_t
>
(
num_controlnet_block_samples
));
int
interval_control
=
ceilDiv
(
transformer_blocks
.
size
(),
static_cast
<
size_t
>
(
num_controlnet_block_samples
));
int
block_index
=
layer
/
interval_control
;
int
block_index
=
layer
/
interval_control
;
// Xlabs ControlNet
// Xlabs ControlNet
...
@@ -837,6 +838,8 @@ std::tuple<Tensor, Tensor> FluxModel::forward_layer(
...
@@ -837,6 +838,8 @@ std::tuple<Tensor, Tensor> FluxModel::forward_layer(
hidden_states
=
kernels
::
add
(
hidden_states
,
controlnet_block_samples
[
block_index
]);
hidden_states
=
kernels
::
add
(
hidden_states
,
controlnet_block_samples
[
block_index
]);
}
else
if
(
layer
>=
transformer_blocks
.
size
()
&&
controlnet_single_block_samples
.
valid
())
{
}
else
if
(
layer
>=
transformer_blocks
.
size
()
&&
controlnet_single_block_samples
.
valid
())
{
const
int
num_controlnet_single_block_samples
=
controlnet_single_block_samples
.
shape
[
0
];
int
interval_control
=
ceilDiv
(
single_transformer_blocks
.
size
(),
static_cast
<
size_t
>
(
num_controlnet_single_block_samples
));
int
interval_control
=
ceilDiv
(
single_transformer_blocks
.
size
(),
static_cast
<
size_t
>
(
num_controlnet_single_block_samples
));
int
block_index
=
(
layer
-
transformer_blocks
.
size
())
/
interval_control
;
int
block_index
=
(
layer
-
transformer_blocks
.
size
())
/
interval_control
;
// Xlabs ControlNet
// Xlabs ControlNet
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment