docstr: In `set_q_k_v`, it is necessary to populate the following variables (where appropriate)
  for the given model:
      self.qw: q weight
      self.qb: q bias
      self.kw: k weight
      self.kb: k bias
      self.vw: v weight
      self.vb: v bias
docstr_tok: ["In","`","set_q_k_v","`",",","it","is","necessary","to","populate","the","following","variables","(","where","appropriate",")","for","the","given","model",":","self.qw",":","q","weight","self.qb",":","q","bias","self.kw",":","k","weight","self.kb",":","k","bias","self.vw",":","v","weight","self.vb",":","v","bias"]
code: def set_q_k_v(self):
      """
      In `set_q_k_v`, it is necessary to populate the following variables (where appropriate)
      for the given model:
          self.qw: q weight
          self.qb: q bias
          self.kw: k weight
          self.kb: k bias
          self.vw: v weight
          self.vb: v bias
      """
      raise NotImplementedError(
          "A set_q_k_v() function must be defined in the model container \
                                      in order to set the unfused q, k, and v tensors."
      )
  
file_path: deepspeed/deepspeed/module_inject/containers/features/split_qkv.py
imports: from abc import abstractmethod
  import torch
  from .hybrid_engine import HybridEngineContainer
label_desc: Use image node_id 2 for calling the HybridSplitQKVContainer obj's underlying member method code with example usage: obj.set_q_k_v() without return types