理解 Java 中的抽象队列同步器(AQS)
最近项目里用到了些 Lock,爬了些文了解到它们是基于 AbstractQueuedSynchronizer(即 AQS)实现的。那么,不如趁热打铁,看看里面是怎么工作的。 什么是 AQSAbstractQueuedSynchronizer,抽象队列同步器,是很多同步器(如 ReentrantLock、CountDownLatch、Semaphore)等都是基于它实现的。 在 AQS 内部,它维护了一个 FIFO 队列,和一个 volatile 类型的变量 state。FIFO 队列用来实现多线程的排队工作,线程加锁失败时,这个线程就会被封装成一个 Node 节点放到队尾,然后当锁被释放后,队列头部的线程就会被唤醒并让它重新尝试获取锁;state 变量用来记录锁的状态,如 Semaphore 的 pe..
更多lstm使用示例
注意,本文代码来自于plm-nlp-code。 学习任何模型都需要一个简单可行的例子进行说明,我会基于plm-nlp-code的代码进行说明lstm在序列标注和句子极性二分类两个例子的应用。 序列标注参考文件lstm_postag.py. 1. 加载数据12#加载数据train_data, test_data, vocab, pos_vocab = load_treebank() 其中load_treebank代码: 12345678910111213141516171819def load_treebank(): # 需要翻墙下载,可以自行设置代码 nltk.set_proxy('http://192.168.0.28:1080') # 如果没有的话那么则会下载,否则忽略 nl..
更多动态词向量之elmo
介绍elmo是用于解决静态词向量无法一词多义的模型。 在介绍如何实现elmo模型的时候,此处穿插进来Conv1d layer(一维卷积层)。 本文代码以plm-nlp-code chp6为准,可直接参考。 Conv1d介绍卷积有Conv1d(序列),Conv2d(图像),Conv3d(立体数据),主要区别在于不同方向上进行卷积。因为文字是一维结构的,从而在nlp领域使用Conv1d。 一维卷积适合在句子对于时序结构上体现不重要的方面有更加的优势。比如一句话中关键词位置的变动不影响句子的语义。但是对时序结构通常效果并不好,因为时间序列通常不满足平移不变的假设。 此处不过多介绍关于Conv1d的原理,感兴趣可看一维卷积tensorflow2版本的Conv1D以及Pytroch的nn.Conv1d用法。 此处只..
更多LLM-RLHF工作原理一
前言大模型最近很是火啊,媒体铺天盖地的宣传,候选者简历中写LLM微调等等。本文希望以huggingface trl/RLHF notebooks讲到的几个例子作为入口,介绍下RLHF在整个训练工作中的位置以及起到的作用,方便理解与后续应用。 代码分析在huggingface trl/RLHF notebooks这个文件夹下,一共有三个例子: gpt2-sentiment.ipynb gpt2-sentiment-control.ipynb best_of_n.ipynb 同时也按照上述这三个文件顺序进行分析。 一、gpt2-sentiment.ipynb 目的:这个文件实现的是如何利用RLHF学会生成正向评论。 1. Load IMDB dataset数据集默认有两个字段,text 和labe..
更多RLHF-DQN
前言下面记录下DQN算法以及一些细节,注意哦,本博客更多目的在于当下记录,并非完整严谨的哦,也或许有理解错误。 关于DQN,看了下网上的介绍以及从Q-Learning到DQN解决state和action无法枚举完的情况。另外也强烈推荐下面链接: 知乎网友实现DQN:可直接按照这个跑通体验下效果。 PaddlePaddle/PARL:这个是paddle出的RLHF库,并提供了相应的examples帮助入门和深入,并且环境也帮忙解决好了,如果debug能力比较强的话,建议直接看这个哦。 PyTorch DQN实现:这个是pytorch官方实现的DQN算法。 一些特别的点1. 俺是value based的,所以不需要softmax看下面这个DQN网络,你觉得有问题么? 12345678910111213cl..
更多RLHF-policy_gradient
前言这个是RLHF系列中的策略梯度部分,在看了Hands-on-RL和parl两者实现后,感觉整体难度并不是很高,但是当自己从零实现时还是会莫名其妙多一些问题,相比深度学习来讲,还是有蛮多小细节是需要额外注意的。 注意点1. log平滑这里是指learn阶段中的获取最大期望阶段,如下代码所示: 12output = self.model(obs_bs)output = torch.log(output.gather(-1, action_bs.reshape(-1, 1))) 在最开始自己实现时,我没有加log进行平滑,发现模型没法收敛(CarPole-v0 reward最大得分为200),一直是8,9徘徊。后来我看了上述实现,发现这里多了个log,这里让我觉得很困惑,因为我觉得这一步是不必要的,原因有..
更多RHLF-DQN
前言下面记录下DQN算法以及一些细节,注意哦,本博客更多目的在于当下记录,并非完整严谨的哦,也或许有理解错误。 关于DQN,看了下网上的介绍以及从Q-Learning到DQN解决state和action无法枚举完的情况。另外也强烈推荐下面链接: 知乎网友实现DQN:可直接按照这个跑通体验下效果。 PaddlePaddle/PARL:这个是paddle出的RHLF库,并提供了相应的examples帮助入门和深入,并且环境也帮忙解决好了,如果debug能力比较强的话,建议直接看这个哦。 PyTorch DQN实现:这个是pytorch官方实现的DQN算法。 一些特别的点1. 俺是value based的,所以不需要softmax看下面这个DQN网络,你觉得有问题么? 12345678910111213cl..
更多一日一技:如何强迫LLama3用中文回复?
最近大家都在说LLama3如何如何强大,追赶Claude3,超过GPT 4。但如果大家真的使用过,就会发现它连基本的中文都回答不好。如下图所示:LLama3总是尽可能回复英文,并且还会加很多表情符号。今天网上出现了一个中文微调版的LLama3:shenzhi-wang/Llama3-8B-Chinese-Chat,我也下载下来使用了,发现确实回复都是中文了,但回复的都是车轱辘话,一句话反复说。如下图所示:那么有没有什么办法,能够让LLama3既能回复中文,又能回复得聪明一些呢?网上有一段“生气的老奶奶”Prompt,可以尽可能让LLama3满足要求:123456问题Rules:- Be precise, do not reply emoji.- Always response in Simplified ..
更多山特UPS控制群晖关机
Foreword 山特的UPS给ESXi用了,就一路串口,只能二选一,但是同时群晖NAS也需要对应关机,还好winpower里也给出来了网络关机接口 群晖开启SSH 默认群晖是未开启SSH,同时root是不允许ssh登录的 先使用默认账号登录进去 切换到root sudo -i 可能要输入密码,再次输入管理员密码即可 修改root密码 synouser --setpw root 新密码 修改ssh,允许root登录 vi /etc/ssh/sshd_config 然后重启一下ssh即可,面板上去掉勾应用,再勾上ssh就重启了,此时root就可以正常登录了 winpower winpower中使用SSH进行远程关机(shutdown -h now),输入ip和账..
更多Foreword 单个ChatGPT Plus 账号共享合租,各自会话独立分割,就好像一个人使用一样,方便给一个组织或者多人使用。 CWS 源于chatgpt-web-share项目,适用于个人、组织或团队的 ChatGPT 共享方案。共享一个 ChatGPT Plus 账号给多人使用,提供完善的管理和限制功能。 https://github.com/chatpire/chatgpt-web-share 部署 新建目录 cd ~ mkdir cws && cd cws mkdir -p data/config 配置初始密码 export MONGODB_PASSWORD=password # MongoDB 密码 export INITIAL_ADMIN_PA..
更多