Add some group parameter to convolutions. (#566)

* Add some group parameter to convolutions.

* Avoid some unnecessary groups checks.

* Move the tensor convolution bits.

* Properh handling of groups.

* Bump the crate version.

* And add a changelog.
This commit is contained in:
Laurent Mazare
2023-08-23 12:58:55 +01:00
committed by GitHub
parent 4ee1cf038a
commit aba1e90797
30 changed files with 216 additions and 113 deletions

View File

@ -11,11 +11,11 @@ readme = "README.md"
[dependencies]
accelerate-src = { workspace = true, optional = true }
candle = { path = "../candle-core", version = "0.1.2", package = "candle-core" }
candle-datasets = { path = "../candle-datasets", version = "0.1.2" }
candle-nn = { path = "../candle-nn", version = "0.1.2" }
candle-transformers = { path = "../candle-transformers", version = "0.1.2" }
candle-flash-attn = { path = "../candle-flash-attn", version = "0.1.2", optional = true }
candle = { path = "../candle-core", version = "0.1.3", package = "candle-core" }
candle-datasets = { path = "../candle-datasets", version = "0.1.3" }
candle-nn = { path = "../candle-nn", version = "0.1.3" }
candle-transformers = { path = "../candle-transformers", version = "0.1.3" }
candle-flash-attn = { path = "../candle-flash-attn", version = "0.1.3", optional = true }
safetensors = { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }

View File

@ -274,14 +274,22 @@ impl EncodecConv1d {
in_c,
out_c,
kernel_size,
Conv1dConfig { padding: 0, stride },
Conv1dConfig {
padding: 0,
stride,
groups: 1,
},
vb.pp("conv"),
)?,
NormType::None => conv1d(
in_c,
out_c,
kernel_size,
Conv1dConfig { padding: 0, stride },
Conv1dConfig {
padding: 0,
stride,
groups: 1,
},
vb.pp("conv"),
)?,
};

View File

@ -66,6 +66,7 @@ impl ResnetBlock2D {
let conv_cfg = nn::Conv2dConfig {
stride: 1,
padding: 1,
groups: 1,
};
let norm1 = nn::group_norm(config.groups, in_channels, config.eps, vs.pp("norm1"))?;
let conv1 = conv2d(in_channels, out_channels, 3, conv_cfg, vs.pp("conv1"))?;
@ -79,6 +80,7 @@ impl ResnetBlock2D {
let conv_cfg = nn::Conv2dConfig {
stride: 1,
padding: 0,
groups: 1,
};
Some(conv2d(
in_channels,

View File

@ -112,8 +112,8 @@ impl UNet2DConditionModel {
let bl_attention_head_dim = config.blocks.last().unwrap().attention_head_dim;
let time_embed_dim = b_channels * 4;
let conv_cfg = nn::Conv2dConfig {
stride: 1,
padding: 1,
..Default::default()
};
let conv_in = conv2d(in_channels, b_channels, 3, conv_cfg, vs.pp("conv_in"))?;

View File

@ -24,7 +24,11 @@ impl Downsample2D {
padding: usize,
) -> Result<Self> {
let conv = if use_conv {
let config = nn::Conv2dConfig { stride: 2, padding };
let config = nn::Conv2dConfig {
stride: 2,
padding,
..Default::default()
};
let conv = conv2d(in_channels, out_channels, 3, config, vs.pp("conv"))?;
Some(conv)
} else {

View File

@ -51,8 +51,8 @@ impl Encoder {
config: EncoderConfig,
) -> Result<Self> {
let conv_cfg = nn::Conv2dConfig {
stride: 1,
padding: 1,
..Default::default()
};
let conv_in = nn::conv2d(
in_channels,
@ -182,8 +182,8 @@ impl Decoder {
let n_block_out_channels = config.block_out_channels.len();
let last_block_out_channels = *config.block_out_channels.last().unwrap();
let conv_cfg = nn::Conv2dConfig {
stride: 1,
padding: 1,
..Default::default()
};
let conv_in = nn::conv2d(
in_channels,

View File

@ -308,10 +308,12 @@ impl AudioEncoder {
let cfg1 = Conv1dConfig {
padding: 1,
stride: 1,
groups: 1,
};
let cfg2 = Conv1dConfig {
padding: 1,
stride: 2,
groups: 1,
};
let conv1 = conv1d(cfg.num_mel_bins, n_state, 3, cfg1, vb.pp("conv1"))?;
let conv2 = conv1d(n_state, n_state, 3, cfg2, vb.pp("conv2"))?;

View File

@ -128,7 +128,11 @@ fn conv(vb: VarBuilder, index: usize, p: usize, b: &Block) -> Result<(usize, Bl)
}
Some(_) | None => (None, true),
};
let conv_cfg = candle_nn::Conv2dConfig { stride, padding };
let conv_cfg = candle_nn::Conv2dConfig {
stride,
padding,
groups: 1,
};
let conv = if bias {
conv2d(p, filters, size, conv_cfg, vb.pp(&format!("conv_{index}")))?
} else {

View File

@ -101,7 +101,11 @@ impl ConvBlock {
padding: Option<usize>,
) -> Result<Self> {
let padding = padding.unwrap_or(k / 2);
let cfg = Conv2dConfig { padding, stride };
let cfg = Conv2dConfig {
padding,
stride,
groups: 1,
};
let conv = conv2d_no_bias(c1, c2, k, cfg, vb.pp("conv"))?;
let bn = batch_norm(c2, 1e-3, vb.pp("bn"))?;
Ok(Self { conv, bn })