2.5G 网络升级指南

前些日子把网络升级到了 2500M,涉及到一些细节,记录下来方便后来人.

在 macOS 上安装 ChatGLM2-6B

ChatGLM2-6B 是开源中英双语对话模型 ChatGLM-6B 的第二代版本,可单机部署。本文记录下要注意的点。

  1. 安装 MPS 。PyTorch 使用新的 Metal Performance Shaders 进行加速,可显著提升训练速度。安装可参考 Apple 的说明。
  2. 建议手动下载完整的模型实现,地址在 huggingface 。其中类似pytorch_model-00001-of-00007.bin
  3. 修改代码支持本地加载模型。如项目中的web_demo.py,参考如下:
# No.5 "../chatglm2-6b-models/chatglm2-6b" 修改为你本地的模型路径
tokenizer = AutoTokenizer.from_pretrained("../chatglm2-6b-models/chatglm2-6b", trust_remote_code=True)
# No.6 同上
model = AutoModel.from_pretrained("../chatglm2-6b-models/chatglm2-6b/", trust_remote_code=True).to('mps')
# No.107 建议增加 server_name 以支持内外网其它客户端
demo.queue().launch(share=False, inbrowser=True, server_name='0.0.0.0')

实测 M1 Max + 32G 统一内存 可顺利运行。

ChatGLM2

迁移到 Apple Silicon M1 Max 踩坑记录

足足等了五年,终于等到 27 寸 iMac 产品线更换模具了。Studio Display + Mac Studio 诱惑十足,唯一的问题是:略贵。

平心而论,以 M1 系列芯片提供的性能与能耗比,真的非常超值。但疫情肆虐,迟迟看不到结束的迹象,收入锐减还得养家糊口,无疑是很慌的。所以只能放弃心水的 M1 ULTRA ,选择 M1 Max。希望疫情早日结束,神州大地国泰民安。

迁移过程

  1. 使用时间机器迁移数据,拿出尘封的雷雳 3 数据线,直连。这是近十年难得一次迁移就成功的幸运经历。时间机器 + 迁移助理堪称双坑组合,以往无论你是使用Wi-Fi、有线网络还是雷雳线,该失败还是失败。可喜可贺!
  2. 系统设置中文件保险箱已经被关闭,需要手动开启。UPS 设置被还原,记得重新设置。若搜索文件出现延迟,请重建索引。修改主机名。修改 IP 地址。
  3. 通过 App Store 安装的程序都是通用种类。也就是说,直接就可以在 M1 上运行。无感,点赞。
  4. 安装 Rosetta 。Apple 的转译程序成熟度超高,👍。
  5. 通过 brew 管理的程序可以通过 brew bundle dumpbrew bundle install 方便的进行备份和恢复。在新机器安装前应该使用 uninstall.sh 脚本拆卸 Intel 版本的包。指令参考如下:sudo ./uninstall.sh --path=/usr/local 。残留的目录可手动删除。
  6. 编译安装的软件如 Ruby、Ruby on Rails 都要重新编译。仔细检查开发环境是否有奇怪的问题。
  7. 转移各种软件授权。
  8. 虚拟机?再买台 Windows 电脑吧!

总结

从整个过程来看,迁移较顺利。经过近两年的适配,ARM 生态醇熟。唯一的问题是:这套丐版也要近三万的造梦引擎套装,没有标配键鼠。对,你没看错。如果你喜欢那个带有触控 ID 和数字小键盘的妙控键盘要额外准备 RMB 1399 ,妙控板 RMB 1049 ,至于妙控鼠标,咋定价都行,那玩意儿没什么人用吧!

使用外置固态硬盘加速配备了混合硬盘的 iMac

如果问苹果台式机的第一大槽点,肯定是默认配备了混合硬盘,让本来就”买屏幕送电脑”的 iMac 性能雪上加霜.这次要升级的是两台 2017 年 iMac .

  1. 21.5吋 4K屏 / 8G 内存( 4 + 4 )
  2. 27吋 5K屏 / 24G 内存( 8 + 8 + 4 + 4 )

比较升级方案

  1. SATA 接口的 SSD (如 Samsung 860 evo 500G 约 500 元) + 天才吧手工费(自己拆卸易损坏,官方授权服务商为 400 元) = 900 元.
  2. Type-C 接口的 PSSD (如 Samsung T5 500G 约 500 元).高端一点可采用 T7(约 800 元) .再奢侈还可以使用雷雳接口的 X5 (约 1800 元).

方案一服务商不接受邮寄,需要搬机器且拆机,麻烦.所以采用方案二.

升级步骤

  1. 下载 Samsung Portable SSD Software for Mac ,升级固件.三星使用亚马逊云,国内下载速度缓慢,可错过高峰期选择清晨时段下载或采取特别姿势.
  2. 在磁盘工具的菜单栏选择”显示” => “显示所有设备”,进行格式化,使用 APFS 分区,并选择 GUID 分区图.
  3. CMD + option + R 重装系统( macOS 10.15 中搭载的 APFS 文件系统存在一个 bug,会导致使用时间机器迁移的系统无法正确启动,所以这里采用重装 + 迁移的方式).
  4. 使用迁移助理迁移全部数据,来源选本地硬盘.
  5. 系统偏好中修改启动磁盘为新硬盘.
  6. 建议在节能设置中勾选”当显示器关闭时,防止电脑自动进入睡眠”,可解决系统睡眠后唤醒过慢的问题.

写在最后

我经过一段时间的尝试,和全闪存机器比较,日常使用主观感受差异不大.三星移动硬盘温控优秀,未见掉速和过热情况,所以分享给大家.

也希望 Apple 能慎重考虑: 2020 年了,为台式机标配全固态吧!

白色恋人和黑天鹅向日葵

原来向日葵也有黑色和白色的.

吊灯

如同化学分子式一般的吊灯.

自行托管 GitLab 以代替群晖套件中心中的套件

之前说坑爹的群晖存在自动升级迁移数据失败的问题并给出了解决方案..这段时间陆陆续续也有一些朋友联系我说遇到相同的问题.考虑到群晖的实际技术实力,遂决定自行托管,放弃套件中心中的套件.

自行托管的好处

  1. 性能更强劲.众所周知,群晖的硬件配置非常低,而 GitLab 又是重型应用程序.即便是旗舰机型也会经常遇到 503 的情况.
  2. 升级更简单.为虚拟机打个快照,执行官方升级程序,搞定收工.
  3. 数据更安全.不必使用非官方的迁移脚本,不必使用官方不推荐的数据库.

托管方式的选择

  1. 服务器,稳定不折腾,视各位体质点数对钱包君会造成一定程度的暴击.
  2. 家里的数据中心服务器或者长时间开机的电脑.我选择了这种,可以获得非常快速的访问体验(穷).

安装 GitLab 详细流程

安装 Debian 9(stretch) 操作系统

  1. 由于 GitLab 要使用较多内存,所以使用 64 位镜像.截至发文时,官网的文件名为debian-9.5.0-amd64-netinst.iso.
  2. 我设置了 4G 内存和 8G 交换空间.
  3. SSH 默认禁止 root 使用密码登录,需要修改/etc/sshd/sshd_config中的PermitRootLoginyes.添加密钥后记得改回来.
  4. 安装open-vm-tools以使用共享文件夹备份数据.
  5. 创建共享文件夹,设置权限为读与写.

安装 GitLab

建议安装企业版(ee),不激活附加功能等同于社区版(ce),如果哪天你想升级到企业版,无需重新安装即可原地升级.

apt-get install -y curl openssh-server ca-certificates sudo
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
apt-get install gitlab-ee

修改 GitLab 配置文件/etc/gitlab/gitlab.rb,然后运行gitlab-ctl reconfigure.

使用gitlab-ctl diff-config可查看修改的选项.

建议修改以下配置:

# 如果是家庭用户,注意默认 80 端口被运营商封锁
external_url 'http://你的网址:端口号'

# 使用第三方发信服务可以获得更好的邮件到达率
gitlab_rails['gitlab_email_from'] = 'example@example.com'

# 备份保存时间,超过这个时间自动删除本地备份
gitlab_rails['backup_keep_time'] = 604800

# 下面的地址是共享文件夹路径
 gitlab_rails['backup_upload_connection'] = {
   'provider' => 'Local',
   'lacal_root' => '/mnt/hgfs/GitLab_data',
 }
# 邮件服务器设置,以阿里云为例
gitlab_rails['smtp_address'] = "smtpdm.aliyun.com"
gitlab_rails['smtp_port'] = 80
gitlab_rails['smtp_user_name'] = "你的发件人用户名"
gitlab_rails['smtp_password'] = "你的密码"
gitlab_rails['smtp_domain'] = "你的网址"

设置备份:

crontab -e
# 每天02:00执行备份.注意刚才我们已经设置了同步备份文件到 Mac 上的共享文件夹.
# 这样我们就可以直接利用时间机器备份到群晖了.
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1

路由器中映射端口,输入你的网址测试吧!

修复群晖 GitLab 升级失败的问题

如果你最近使用群晖套件中心的 GitLab( 9.4.4-0050 ) ,并且勾选转换数据库( MariaDB => postgresql ),那么你很可能遇到丢失数据的问题( Version: 10.6.4-0051 ).表现为打开 GitLab 首页提示设置 root 密码,登录后台显示所有项目丢失.

一行代码与两个漏洞

某日帮客户处理后台问题,途中需要阅读代码,随眼一扫,感觉问题太多,以管理员登录后台为例

$data['admin_pass'] = md5(strtolower($_POST['admin_pass']));

短短的一行代码可以看到其中包含两个缺陷:

将用户输入转为小写,导致密码不区分大小写.

以允许使用英文和数字的 8 位密码为例,区分大小写有 218340105584896 种可能,不区分大小写只有 2821109907456 种可能,两者差距约为 77 倍,增加了密码被破解的可能性.

没有正确使用加密算法.

虽然 MD5 是一种不可逆的算法,但是网络安全人员通过彩虹表可以逆向查询到原始密码.破解的大致流程是这样的,首先计算出所有密码的可能性(原文),然后进行加密运算得到密文.当需要破解某个密码的时候,直接查询密文比对出原文即可得知明文密码.

为了对抗彩虹表攻击,开发人员曾使用增加 salt 的方式来增加攻击者成本.

md5('password' . 'salt')

知名论坛程序 Discuz! 就使用了类似的方式.一时间开发人员纷纷加盐,活脱脱咸菜世家的节奏.

现在的解决方案.

都 8102 年了,对技术稍微有点追求的开发者都在使用 bcrypt 了!

写在冥王峡谷上市之前

我对迷你尺寸的 PC 一直情有独钟,尤其是 NUC :巴掌大的体积,媲美台式机的性能.符合我对小钢炮的全部想象.前些日子听说 Intel 和 AMD 联手打造了新一代旗舰 NUC8i7HVK ,于是叨咕两句权当纪念兢兢业业陪伴我加班的小骷髅.

没有跑分,没有对比,没有开箱,只有碎碎念.

前年因工作需要,编译和读写大文件成为了我的日常.主力机 MacBook Pro ( 2014 Mid )有些力不从心,耗时太久.曾帮网友配了一台骷髅峡谷,对它的表现印象极其深刻,于是拔草.

整机配置为:

CPU + 主板 Intel NUC6i7KYK
硬盘 samsung 850 EVO 500G
内存 金士顿骇客神条 Impact 系列 DDR4 2133 32G ( 16G * 2)

在后续的使用中,标压满血的 i7-6770HQ 表现凶残.原本需要 30 分钟的工作不到 5 分钟就完成了.对此我非常满意.这里我强行按捺怒火忍住了对 Windows 10 ( Bug 10 )的吐槽.

槽点不多.一是被 Intel 寄予厚望的锐炬显卡表现差强人意,在运行 FFX 时 1080P 的分辨率下也无法开启最高特效.二是经常会听到如同直升机起飞的噪音,听得久了习惯了,感觉很踏实.小家伙仿佛在和我说:嘿,我在努力工作,你也别偷懒.让它干的总是累活,有时会产生雇佣童工的错觉.不知道 ITX 神教的信徒听到这段话会作何感想.

后来换了新电脑,性能强大,骷髅就闲置了.本着物尽其用的原则,帮它寻了新的下家,至此阶段性目标圆满达成,本季终.