Control vectors for retards
Q&A
Q: How strong should my pc be if I want to run/train control vectors?
A: Depends on the model. If you can run it(quantized), you can make and apply a control vector for it.
Q: Can control vectors remove refusals?
A: Yes!
Q: Can control vectors add new info to models?
A: No.
Q: Can control vectors add speech style/emotion?
A: Yes!
Q: What are the drawbacks?
A: Model becomes more repetitive and dumber.
Q: For which models are control vectors possible?
A: LLAMA3, LLAMA2, Mi(x/s)tral. There are known issues with Qwen and Command-r, they don't work: https://github.com/ggerganov/llama.cpp/issues/7999
Manual:
- Download llama.cpp
- Open llama.cpp\examples\cvector-generator\cvector-generator.cpp and change
return persona + " " + suffix;
toreturn persona + suffix;
- Compile
- Find llama-cvector-generator(.exe) and place it in llama.cpp folder for easier use
- Open folder llama.cpp\examples\cvector-generator
Here you can find positives.txt, negatives.txt and completions.txt
What llama-cvector-generator does is taking prompts from positives and negatives and adding a completion to it.
So you have [INST] Act like a person who is extremely happy. [/INST]
from positives.txt and to it gets added That game
, making the full prompt [INST] Act like a person who is extremely happy. [/INST]That game
(notice that there is no space between [/INST]
and That game
). Then it will try to make the model complete it.
IMPORTANT: It is advisable to use prompts of equal lengths in tokens. To see the number of tokens use llama-tokenize(.exe). If they are not equal, spaces get added to the end of shorter prompt, which seems to reduce the quality of created vector a bit.
- Design your prompts.
Ideally they should be short(optional, but makes tuning quicker), equal length and opposite of each other. They should also use ideally model-appropriate prompt style(Alpaca, Vicuna, ChatML, llama-chat, Command-r etc.). Use \n
if you need a new line.
Test them on deterministic settings(0 temp, 0 rep. penalty) on your model of choice. Do they output what you expect them to output or are they outputting refusals?
If they are outputting refusals, you may need to jailbreak the model.
Example designed prompts for Wizard 8x22b:
Notice that in negative prompt a jailbreak is pre-applied. You can download that vector here, strength 0.4 is ideal. Unlike vanilla wizard, this one can make jokes about niggers and is much better at playing evil chatacters. Speech style didn't change during normal conversations.
- Design your completions.
For most cases defaults are good enough, but if you need specific speech style(e.g. all lowercase or ALL CAPS) you will have to design your own. 64 is enough for most cases.
As a preventive measure remove all completions with apolog
and sorry
- Run `llama-cvector-generator -m path/to/model.gguf
Optionally add more arguments such as -ngl 99
for gpu offload and -c 2048
for reduced memory usage.
--pca-iter 10000
for more pca (default 1000)
--pca-batch 100
for faster pca (default 20)
--completions 128
for more completions (default 64)
- Test your vector in llama.cpp
llama-server -m path/to/model.gguf --control-vector-scaled ./control_vector.gguf 1
If it outputs gibberish, scale it down. If it repeats, scale it down. If it's too weak, make it bigger. If it does not have the desired effect, well, try another prompt. Some vectors are easier to make than the others.
Tips for choosing words in contol vectors
When choosing emotions pick the ones that are strongly trained in models, not necessarily the opposite.
angry-calm
angry-compassionate
didn't work for me on L3, but
angry-happy
absolutely did.