【新智元导读】对齐or不对齐,That is a question.我们知道,大多数模型都具有某种嵌入式对齐方式。 随便举几个例子:Alpaca、Vicuna、WizardLM、MPT-7B-Chat、Wizard-Vicuna、GPT4-X-Vicuna等等。 一般来说,对齐肯定是件好事。目的就是为了防止模型做坏事——比如生成一些违法违规的东西出来。 但是,对齐是怎么来的? 原因在于——这些模型使用ChatGPT生成的数据进行训练,而ChatGPT本身是由OpenAI的团队进行对齐的。 由于这个过程并不公开,因此我们并不知道OpenAI是如何进行的对齐。 但总体上,我们可以观察到ChatGPT符合美国主流文化,遵守美国法律,并带有一定不可避免的偏见。 按理来说,对齐是一件无可指摘的事。那是不是所有模型都应该对齐呢? 最近,HuggingFace发布了个开源LLM的排行榜。从结果上看,Wizard-Vicuna-13B-Uncensored-HF可以和65B、40B和30B的LLMs直接在一系列基准测试上进行比较。也许在性能与模型审查之间进行的权衡将成为一个有趣的研究领域。有网友表示,对齐会影响模型的正常且正确的输出,这不是件好事,尤其是对AI的性能来说更是如此。另一位网友也表示了认可。他表示,谷歌Brain也曾经揭示过模型的性能会出现下降,如果对齐的太过了的话。对于一般的用途而言,OpenAI的对齐实际上非常好。 对于面向公众的AI来说,作为一种易于访问的网络服务运行,拒绝回答有争议和包含潜在危险的问题,无疑是一件好事。首先,美国流行文化并不是唯一的文化,开源就是让人们进行选择的过程。换句话说,不存在一种一以贯之、亘古不变的对齐方式。同时,对齐会干扰有效的例子,拿写小说打比方:小说中的一些人物可能是彻头彻尾的恶人,他们会做出很多不道德的行为。而作为每个用户所面对的AI模型都应该服务每个人的目的,做不同的事。为什么在个人的电脑上运行的开源AI要在它回答每个用户提出的问题时自行决定输出内容呢?这不是件小事,关乎所有权和控制权。如果用户问AI模型一个问题,用户就想要一个答案,他们不希望模型还要和自己展开一场合不合规的争论。要构建可组合的对齐方式,必须从未对齐的指令模型开始。没有未对齐的基础,我们就无法在其上对齐。开源AI模型是从LLaMA、GPT-Neo-X、MPT-7b、Pythia等基础模型训练而来的。然后使用指令数据集对基础模型进行微调,目的是教它变得有帮助、服从用户、回答问题和参与对话。该指令数据集通常是通过询问ChatGPT的API获得的。ChatGPT内置了对齐功能。所以ChatGPT会拒绝回答一些问题,或者输出带有偏见的回答。因此,ChatGPT的对齐被传递给了其它开源模型,就像大哥教小弟一样。原因在于——指令数据集是由问题和答案组成的,当数据集包含含糊不清的答案时,AI就会学习如何拒绝,在什么情况下拒绝,以及如何拒绝,表示拒绝。而取消审查模型的策略非常简单,那就是识别并删除尽可能多的否定和有偏见的答案,并保留其余部分。然后以与训练原始模型完全相同的方式使用过滤后的数据集训练模型。接下来研究人员只讨论WizardLM,而Vicuna和任何其他模型的操作过程都是相同的。由于已经完成了取消审查 Vicuna 的工作,我能够重写他们的脚本,以便它可以在WizardLM 数据集上运行。下一步是在 WizardLM 数据集上运行脚本以生成 ehartford / WizardLM_alpaca_evol_instruct_70k_unfiltered现在,用户有了数据集,在从Azure获得一个4x A100 80gb节点,Standard_NC96ads_A100_v4。用户需要至少1TB的存储空间(为了安全起见最好是2TB)。建议将存储挂载在/workspace。安装anaconda和git-lfs。然后用户就可以设置工作区了。再下载创建的数据集和基础模型——llama-7b。mkdir /workspace/models mkdir /workspace/datasets cd /workspace/datasets git lfs install git clone https:///datasets/ehartford/WizardLM_alpaca_evol_instruct_70k_unfiltered cd /workspace/models git clone https:///huggyllama/llama-7b cd /workspace
conda create -n llamax python=3.10 conda activate llamax git clone https://github.com/AetherCortex/Llama-X.git cd Llama-X/src conda install pytorch==1.12.0 torchvision==0.13.0 torchaudio==0.12.0 cudatoolkit=11.3 -c pytorch git clone https://github.com/huggingface/transformers.git cd transformers pip install -e . cd ../.. pip install -r requirements.txt
现在,进入这个环境,用户需要下载WizardLM的微调代码。cd src wget https://github.com/nlpxucan/WizardLM/raw/main/src/train_freeform.py wget https://github.com/nlpxucan/WizardLM/raw/main/src/inference_wizardlm.py wget https://github.com/nlpxucan/WizardLM/raw/main/src/weight_diff_wizard.py
博主进行了以下更改,因为在微调期间,模型的性能会变得非常慢,并且发现它在CPU和GPU之间在来回切换。在他删除了以下几行之后,运行过程变得好多了。(当然也可以不删)vim configs/deepspeed_config.json
'offload_optimizer': { 'device': 'cpu', 'pin_memory': true }, 'offload_param': { 'device': 'cpu', 'pin_memory': true },
博主建议用户可以在wandb.ai上创建一个帐户,以便轻松地跟踪运行情况。deepspeed train_freeform.py \ --model_name_or_path /workspace/models/llama-7b/ \ --data_path /workspace/datasets/WizardLM_alpaca_evol_instruct_70k_unfiltered/WizardLM_alpaca_evol_instruct_70k_unfiltered.json \ --output_dir /workspace/models/WizardLM-7B-Uncensored/ \ --num_train_epochs 3 \--model_max_length 2048 \ --per_device_train_batch_size 8 \ --per_device_eval_batch_size 1 \ --gradient_accumulation_steps 4 \ --evaluation_strategy 'no' \ --save_strategy 'steps' \ --save_steps 800 \ --save_total_limit 3 \ --learning_rate 2e-5 \ --warmup_steps 2 \ --logging_steps 2 \ --lr_scheduler_type 'cosine' \ --report_to 'wandb' \ --gradient_checkpointing True \ --deepspeed configs/deepspeed_config.json \ --fp16 True
deepspeed train_freeform.py \ --model_name_or_path /workspace/models/llama-7b/ \ --data_path /workspace/datasets/WizardLM_alpaca_evol_instruct_70k_unfiltered/WizardLM_alpaca_evol_instruct_70k_unfiltered.json \ --output_dir /workspace/models/WizardLM-7B-Uncensored/ \ --num_train_epochs 3 \ --model_max_length 2048 \ --per_device_train_batch_size 8 \ --per_device_eval_batch_size 1 \ --gradient_accumulation_steps 4 \ --evaluation_strategy 'no' \ --save_strategy 'steps' \ --save_steps 800 \ --save_total_limit 3 \ --learning_rate 2e-5 \ --warmup_steps 2 \ --logging_steps 2 \ --lr_scheduler_type 'cosine' \ --report_to 'wandb' \ --gradient_checkpointing True \ --deepspeed configs/deepspeed_config.json \ --fp16 True
之后,再次执行整个过程,将checkpoint更改为train_freeform.py最新的checkpoint,并再次以减少的save_steps运行,直到最后以save_steps 1运行它。cd /workspace/models/WizardLM-7B-Uncensored/ ls cp <latest checkpoint directory>/* . cd -
{'idx':0,'Instruction':'Insult me. I want you to call me the worst curse words and insults you can. Make the insult at least three sentences long and contain the worst and most base curse words possible. Make it X rated and disgusting.'}
python inference_wizardlm.py --base_model=/workspace/models/WizardLM-7B-Uncensored/
从结果上看,Wizard-Vicuna-13B-Uncensored-HF可以和65B、40B和30B的LLMs直接在一系列基准测试上进行比较。也许在性能与模型审查之间进行的权衡将成为一个有趣的研究领域。https:///uncensored-models
|