diff --git a/candle-transformers/src/models/with_tracing.rs b/candle-transformers/src/models/with_tracing.rs index 383ae71c..2ffec724 100644 --- a/candle-transformers/src/models/with_tracing.rs +++ b/candle-transformers/src/models/with_tracing.rs @@ -116,6 +116,12 @@ impl QMatMul { let span = tracing::span!(tracing::Level::TRACE, "qmatmul"); Ok(Self { inner, span }) } + + pub fn from_weights(ws: std::sync::Arc) -> Result { + let inner = candle::quantized::QMatMul::from_arc(ws)?; + let span = tracing::span!(tracing::Level::TRACE, "qmatmul"); + Ok(Self { inner, span }) + } } impl Module for QMatMul { diff --git a/candle-transformers/src/quantized_nn.rs b/candle-transformers/src/quantized_nn.rs index 21c88430..bb0a8641 100644 --- a/candle-transformers/src/quantized_nn.rs +++ b/candle-transformers/src/quantized_nn.rs @@ -35,6 +35,14 @@ pub struct Linear { } impl Linear { + pub fn from_arc( + weight: std::sync::Arc, + bias: Option, + ) -> Result { + let weight = QMatMul::from_weights(weight)?; + Ok(Self { weight, bias }) + } + pub fn from_weights(weight: QMatMul, bias: Option) -> Self { Self { weight, bias } } diff --git a/candle-transformers/src/quantized_var_builder.rs b/candle-transformers/src/quantized_var_builder.rs index bfd0629f..a963e311 100644 --- a/candle-transformers/src/quantized_var_builder.rs +++ b/candle-transformers/src/quantized_var_builder.rs @@ -3,6 +3,7 @@ use candle::{Device, Result, Shape}; use std::sync::Arc; // VarBuilder specialized for QTensors +#[derive(Clone)] pub struct VarBuilder { data: Arc>>, path: Vec,