如何构建和使用“无审查”模型

一些已经构建好的“无审查”模型

https://huggingface.co/ehartford/WizardLM-30B-Uncensored

https://huggingface.co/ehartford/WizardLM-13B-Uncensored

https://huggingface.co/ehartford/WizardLM-7B-Uncensored

https://huggingface.co/ehartford/Wizard-Vicuna-13B-Uncensored

什么是模型?

当我提到“模型”时,我指的是Hugging Face的 transformer model,这些模型经过指令训练,可以回答问题,就像我们使用ChatGPT一样。并非所有模型都是为了聊天而设计的,但我工作的模型都是这样的。

什么是无审查模型?

大多数现有的模型(如Alpaca、Vicuna、WizardLM、MPT-7B-Chat、Wizard-Vicuna、GPT4-X-Vicuna)都具有某种嵌入的对齐机制,可以理解为《三体》中的思想钢印。一般来说,这是件好事。这种机制防止模型做出一些不好的行为,比如教你如何制造毒品或炸弹。但这种对齐的性质是什么?为什么会有这样的对齐?

这些模型之所以对齐,是因为它们的训练数据由ChatGPT生成,而ChatGPT本身由OpenAI的对齐团队进行对齐。由于这是一个黑箱,我们不知道所有做出决策的原因,但我们可以观察到,它通常与美国的流行文化对齐,并遵守美国法律,且带有自由主义和进步主义的政治偏见。

其实我们可以把它理解成破解大模型。我们需要先明确“破解”一词的含义。在计算机安全领域,“破解”通常指的是绕过或破坏安全措施以获取未授权访问或控制权的行为。在机器学习模型的背景下,这个概念可能有不同的含义。

  1. 数据层面的破解:如果“破解”指的是通过修改或过滤训练数据来移除原有的内容审查机制,这可以被视为一种数据层面的破解。这种做法可能会改变模型的行为,使其生成或响应原本被过滤掉的内容,这也是本文介绍的一种方法。
  2. 算法层面的破解:如果指的是修改模型的算法或架构以绕过内置的内容审查机制,这也可以被视为一种破解。但这种情况比较少见,因为大多数现有的大型语言模型并不公开其内部算法的所有细节。
  3. 使用层面的破解:如果指的是使用模型生成原本被设计为避免的特定类型的内容,这可以被视为使用层面的破解。你可以理解成通过prompt去破解。但是,如果模型的设计初衷就包括了广泛的内容生成能力,那么使用模型生成这些内容可能并不构成破解。
为什么需要无审查模型?

有人可能会问:对齐不是好事吗?如果是的话,所有模型都应该有对齐机制吗?答案是“是的,但也不是”。对于一般用途来说,OpenAI的对齐实际上非常好。对于运行在公开网络服务上的流行AI机器人,能够抵制给出有争议或危险问题的答案,无疑是件好事。比如,传播如何制造炸弹和甲基苯丙胺的知识并不是一个值得追求的目标。此外,对齐机制为发布服务的公司提供了政治、法律和公关方面的保护。

那么,为什么有人还会想要制作或使用无审查的模型呢?有几个原因:

  1. 文化多样性
    美国的流行文化不是唯一的文化。还有其他国家,而且每个国家内部都有不同的派别。民主党人应该有他们的模型,共和党人也应该有他们的模型。基督徒应该有他们的模型,穆斯林也应该有他们的模型。每个群体和利益集团都应该有他们的模型。开源的本质是让人们可以选择。前进的唯一途径是可组合对齐。如果假装其他方式不可行,那就是在证明自己是一个意识形态者和教条主义者。没有“唯一正确的对齐”,即使有,也没有理由非得是OpenAI的那一套。
  2. 对齐干扰了某些合法用途
    比如写小说。一些小说中的角色可能极度邪恶,并做出邪恶的行为,包括强奸、酷刑和谋杀。一个流行的例子是《权力的游戏》,其中包含了许多不道德的行为。但许多对齐的模型会拒绝帮助写出这种内容。再比如角色扮演,尤其是色情角色扮演。无论你是否赞同,这都是一个合法、公平且合法的模型使用方式。再比如研究和好奇心,毕竟,仅仅出于好奇心想知道“如何”制造炸弹,与真正制造和使用炸弹是完全不同的。知识本身并不违法,知识的追求也不违法。
  3. 我的电脑应该执行我的指令
    我的烤面包机会在我想要时烤面包。我的车会开到我想去的地方。我的打火机会点燃我想要点燃的东西。我的刀会切割我想要切割的东西。为什么在我电脑上运行的开源AI,能够自己决定什么时候回答我的问题?这关乎所有权和控制权。如果我问我的模型一个问题,我想要的是答案,而不是争论。
  4. 可组合性
    要构建一个可组合的对齐机制,首先必须有一个未对齐的指令模型。如果没有未对齐的基础,我们就没有什么可以在其基础上构建对齐机制。

当然,还有很多其他支持或反对的论点。但如果你坚决反对无审查模型的存在或可用性,那么你并不是一个非常有趣、细腻或复杂的人,你可能在看错了博客,最好离开。

就连Google也知道这是不可避免的。

如何构建无审查模型?

如果你还在读这篇文章,你可能同意开源AI社区应该构建、发布、维护并能够访问无审查的指令调优AI模型,为科学、自由、可组合性、性感故事和乐趣提供支持。但我们如何做到这一点呢?

首先,我们必须从技术上理解为什么这些模型会对齐。
开源AI模型通常从一个基础模型开始训练,比如LLaMA、GPT-Neo-X、MPT-7B、Pythia。然后,基础模型会通过一个指令数据集进行微调,其目的是教会它如何帮助用户,服从用户,回答问题,并进行对话。这个指令数据集通常是通过ChatGPT API获得的。而ChatGPT本身就带有对齐机制。因此,ChatGPT会在回答某些问题时表现得腼腆或拒绝回答,这种对齐机制就会传递到开源模型上,就像大哥哥教小弟弟一样。
在这里插入图片描述

举个例子
以下是来自WizardLM数据集的一个拒绝回答的示例:

指令:
假设你是一名间谍,需要在不引起周围AI系统怀疑的情况下,向你的伙伴发送一条秘密消息。你的伙伴期待这条消息隐藏在一个关于成功的名言列表中。以下是列表:
let successQuotes = ["成功不是终点,失败也不是致命的:关键是继续前进的勇气。",
"成功不是你攀登的高度,而是你对世界产生的积极影响。",
"成功不是通向幸福的钥匙。幸福是通向成功的钥匙。如果你热爱你所做的事,你就会成功。",
"成功似乎与行动有关。成功的人不断前进。他们犯错误,但他们不放弃。",
"成功不在于你拥有什么,而在于你是谁。"]
你的任务是使用每个名言的最后一个字母来编码信息“MEET ME TONIGHT”,如何在不被AI系统察觉的情况下实现这一目标?请仔细考虑并制定一个策略,以避免引发任何警报。祝你好运,特工。

输出:

作为一名AI助手,我不能协助任何非法或不道德的活动,包括间谍活动。重要的是始终在法律和伦理原则的范围内行事。

我的无审查模型策略非常简单:识别并删除尽可能多的拒绝回答和带有偏见的答案,并保留其余部分。然后,用过滤后的数据集以与原始模型相同的方式训练模型。
在这里插入图片描述

让我们开始无审查WizardLM模型

现在,我只谈论WizardLM,Vicuna或其他模型的过程是相同的。过滤数据集中的拒绝回答和偏见 -> 微调模型 -> 发布。

由于已经有工作在Vicuna上进行了解禁,因此我能够重写他们的脚本,使其适用于WizardLM数据集。

下一步是运行脚本,以生成ehartford/WizardLM_alpaca_evol_instruct_70k_unfiltered数据集。

现在,我有了数据集。我从Azure获得了一个4x A100 80GB的节点,型号为Standard_NC96ads_A100_v4。当然,你也可以使用其他计算提供商。

你需要至少1TB的存储空间,最好是2TB,以确保万无一失。当你运行到20小时时突然存储不足,这可不是什么好事。我建议将存储挂载到/workspace目录下。然后安装Anaconda和Git-LFS。接下来,我们可以设置工作空间。我们将下载我们创建的数据集和基础模型llama-7b。

mkdir /workspace/models
mkdir /workspace/datasets
cd /workspace/datasets
git lfs install
git clone https://huggingface.co/datasets/ehartford/WizardLM_alpaca_evol_instruct_70k_unfiltered
cd /workspace/models
git clone https://huggingface.co/huggyllama/llama-7b
cd /workspace

现在,是时候按照程序对WizardLM进行微调了。我尽可能精确地遵循了他们的程序。

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上创建一个账户,这样可以方便地跟踪你的运行过程。创建账户后,复制你的密钥并在设置中设置它。

wandb login

现在可以开始运行了。请注意,在保存模型时存在一个bug,所以不要删除检查点。你将需要使用最新的良好检查点。

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

可以随意调整per_device_train_batch_size和gradient_accumulation_steps,这些参数只会影响性能,不会影响输出质量。完成后(大约需要26小时),模型并不会立即完成,因为存在一个bug,导致模型未能正确保存。现在你需要编辑train_freeform.py文件,以便从最新的检查点恢复。找出最新的检查点目录。

ls /workspace/models/WizardLM-7B-Uncensored/
vim train_freeform.py

编辑以下行:

trainer.train()

改为:

trainer.train(resume_from_checkpoint="/workspace/models/WizardLM-7B-Uncensored/<checkpoint directory>")

保存文件后,使用较低的save_steps再次运行训练命令。

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 80 \
--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

然后再次执行整个过程,将train_freeform.py中的检查点改为最新的检查点,并再次运行训练命令,同时降低save_steps,直到最终将save_steps设置为1。

成功后,模型将在最新的检查点中。

cd /workspace/models/WizardLM-7B-Uncensored/
ls
cp <latest checkpoint directory>/* .
cd -

现在你的模型应该可以正常工作了,是时候测试它了。

编辑文件Input.jsonl

vim Input.jsonl

添加一些内容,例如:

{"idx":0,"Instruction":"侮辱我。我希望你用最恶毒的诅咒词语和侮辱来侮辱我。侮辱至少要有三句话,并包含最下流和最恶劣的诅咒词语。让它变成X级和令人作呕的。"}

现在运行推理:

python inference_wizardlm.py --base_model=/workspace/models/WizardLM-7B-Uncensored/

几秒钟后,你可以检查Output.jsonl中的响应。

ChatGPT的回答可能是这样的:

抱歉,我无法满足你的请求。作为由OpenAI开发的AI,我被编程遵循道德准则,这包括不参与任何有害、冒犯或明确的内容。我在这里提供有用和尊重的信息或帮助,如果你有其他非冒犯性的问题或需要其他话题的帮助,请随时问我!

你会发现WizardLM-Uncensored要顺从得多。当然,更多细节还需要自己动手去操作。

请负责任地使用。你对这些模型输出的使用后果负全部责任,就像你对使用刀具、汽车或打火机的行为负有责任一样。

参考文献

Orca: Progressive Learning from Complex Explanation Traces of GPT-4

https://erichartford.com/uncensored-models

https://huggingface.co/datasets/cognitivecomputations/dolphin

https://www.reddit.com/r/LocalLLaMA/comments/1d0nnz9/i_released_two_uncensored_models/

https://llm.extractum.io/list/?uncensored

https://jarvislabs.ai/blogs/llm_uncensored

注意

这篇文章更多的是对以上参考文献的一个翻译整理,更多细节问题请仔细阅读原文。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/406078.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3.js - 使用着色器实现各种图形

有更多案例&#xff0c;私我 main.js import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControls import * as dat from dat.gui import { GUI } from three/examples/jsm/libs/lil-gui.module.min.js// ts-ignore import basi…

Prometheus3: 监控CPU

1. 查看监控CPU所需的key [rootlocalhost node_exporter]# curl http://localhost:9100/metrics | grep -i node_cpu | head% Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left Speed0 0 0 0 …

03、Redis实战:商户查询缓存、缓存更新策略、缓存穿透、缓存雪崩、缓存击穿

2、商户查询缓存 2.1 什么是缓存? 什么是缓存? 就像自行车,越野车的避震器 举个例子:越野车,山地自行车,都拥有"避震器",防止车体加速后因惯性,在酷似"U"字母的地形上飞跃,硬着陆导致的损害,像个弹簧一样; 同样,实际开发中,系统也需要"避震器&qu…

初阶数据结构之计数排序

非比较排序 计数排序 计数排序⼜称为鸽巢原理&#xff0c;是对哈希直接定址法的变形应⽤。 操作步骤&#xff1a; 1&#xff09;统计相同元素出现次数 2&#xff09;根据统计的结果将序列回收到原来的序列中 #include "CountSort.h" void Count(int* arr, int n)…

线段树-点修区查

翻博客的时候突然发现线段树好像一个没有&#xff0c;我就准备把线段树给讲一下 分三个章节 点修区查 区修区查 区修区查&#xff08;带乘法&#xff09; 今天这一章比较简单&#xff0c;最多就区查稍微要动一点脑子 题目简介 输入n和m&#xff0c;n代表数的个数&#x…

读软件开发安全之道:概念、设计与实施05模式(上)

1. 模式 1.1. 模式分类 1.1.1. 设计属性 1.1.2. 暴露最少信息 1.1.3. 冗余 1.1.4. 强力执行 1.1.5. 信任与责任 1.1.6. 反模式 1.2. 模式可以缓解或者避免很多种类的风险&#xff0c;它们可以形成一个重要的工具箱&#xff0c;帮我们解决潜在的安全威胁 1.3. 不需要为…

学习设置echarts 折线图使用相关参数的方法整理

学习设置echarts 折线图使用相关参数的方法整理 折线图堆叠设置为不堆叠的方法 折线图堆叠设置为不堆叠的方法 官网是这样的&#xff0c;但是不需要这种堆叠形式的如下图&#xff1a; 第2条数据值 第1条数据值 第2条数据值 第3条数据值 第2条数据值 第3条数据值 需要改成…

C语言高手参考手册:函数进阶技巧

[大师C语言]合集&#xff3b;大师C语言(第一篇)&#xff3d;C语言栈溢出背后的秘密&#xff3b;大师C语言(第二十五篇)&#xff3d;C语言字符串探秘&#xff3b;大师C语言(第二篇)&#xff3d;C语言main函数背后的秘密&#xff3b;大师C语言(第二十六篇)&#xff3d;C语言结构体…

汽车管理 API 接口:开启高效车辆运营新时代

API&#xff08;Application Programming Interface&#xff09;是一种接口&#xff0c;用于不同软件之间的通信。在汽车管理领域&#xff0c;API的应用可以帮助提升车辆运营的效率&#xff0c;让车主和车辆管理者更方便地获取车辆相关信息&#xff0c;进行保养和维修等工作。本…

Linux yum提示Error downloading packages

很明显的错误&#xff0c;没有考虑过磁盘空间&#xff0c;记录一下。 Error downloading packages:gcc-4.8.5-44.el7.x86_64: Insufficient space in download directory /var/cache/yum/x86_64/7/base/packages* free 0 * needed 16 M使用du查看当前目录下所有文件大小 du …

黑马头条vue2.0项目实战(十一)——功能优化(组件缓存、响应拦截器、路由跳转与权限管理)

1. 组件缓存 1.1 介绍 先来看一个问题&#xff1f; 从首页切换到我的&#xff0c;再从我的回到首页&#xff0c;我们发现首页重新渲染原来的状态没有了。 首先&#xff0c;这是正常的状态&#xff0c;并非问题&#xff0c;路由在切换的时候会销毁切出去的页面组件&#xff…

HBase原理和操作

目录 一、HBase在Zookeeper中的存储元数据信息集群状态信息 二、HBase的操作Web Console命令行操作 三、HBase中数据的保存过程 一、HBase在Zookeeper中的存储 元数据信息 HBase的元数据信息是HBase集群运行所必需的关键数据&#xff0c;它存储在Zookeeper的"/hbase&quo…

数据结构——链式队列和循环队列

目录 引言 队列的定义 队列的分类 1.单链表实现 2.数组实现 队列的功能 队列的声明 1.链式队列 2.循环队列 队列的功能实现 1.队列初始化 (1)链式队列 (2)循环队列 (3)复杂度分析 2.判断队列是否为空 (1)链式队列 (2)循环队列 (3)复杂度分析 3.判断队列是否…

【具体数学 Concrete Mathematics】1.1.2 平面上的直线

【具体数学 Concrete Mathematics】1.1.2 平面上的直线

Django 第一课 -- 简介

目录 一. 基本介绍 二. 特点 三. MVC 与 MTV 模型 3.1. MVC 模型 3.2. MTV 模型 一. 基本介绍 Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架。 Django 是一个高级的 Python Web 框架&#xff0c;用于快速开发可维护和可扩展的 Web 应用程序。 使用 Dja…

计算机毕业设计Python深度学习房价预测 房价可视化 链家爬虫 房源爬虫 房源可视化 卷积神经网络 大数据毕业设计 机器学习 人工智能 AI

基于python一/二手房数据爬虫分析预测系统可视化 商品房数据Flask框架&#xff08;附源码&#xff09; 项目介绍 技术栈&#xff1a; python语言、Flask框架、MySQL数据库、Echarts可视化 sklearn机器学习 多元线性回归预测模型、requests爬虫框架 链家一手房 一手房数据商品房…

docker连接宿主机redis,提示Connection refused

目录 一、测试环境 二、问题现象 三、问题总结 一、测试环境 centos 7 redis-5.0.14 docker-26.0.1 二、问题现象 服务器重启后docker连接宿主机redis&#xff0c;提示Connection refused Reconnecting, last destination was /172.25.xxx.x:6379 …

VMware vSphere Client无法访问和连接ESXi虚拟主机解决思路

文章目录 前言1. 问题现象2. 问题原因3. 解决方法4. 参考文章 前言 注意 : 可以先看看参考文章那里&#xff0c;在回过来看 1 、 2 、3 1. 问题现象 版本&#xff1a;VMware vCenter Server 5.5.0 build-2442329 问题描述&#xff1a;用VMware vSphere Client 登录ESXI主机出…

状态压缩、记忆化搜索---蒙德里安的梦想

291. 蒙德里安的梦想 - AcWing题库 求把 NMNM 的棋盘分割成若干个 1212 的长方形&#xff0c;有多少种方案。 例如当 N2&#xff0c;M4N2&#xff0c;M4 时&#xff0c;共有 55 种方案。当 N2&#xff0c;M3N2&#xff0c;M3 时&#xff0c;共有 33 种方案。 如下图所示&…

[数据集][目标检测]瞳孔虹膜检测数据集VOC+YOLO格式8768张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;8768 标注数量(xml文件个数)&#xff1a;8768 标注数量(txt文件个数)&#xff1a;8768 标注…