第 62 期:温故而知新

@Author : Lewis Tian (taseikyo@gmail.com)

@Link : github.com/taseikyo

@Range : 2024-05-12 - 2024-05-18

Weekly #62

readme | previous | next

本文总字数 7210 个,阅读时长约:8 分 18 秒,统计数据来自:算筹字数统计

*Photo by Tomáš Malík on Unsplash

Table of Contents

  • review

    • How Does Reading Affect Your Brain

    • LLMs Pitfalls: An introduction to some of the key components surrounding LLMs to produce production-grade applications

    • What Does It Mean To Regulate AI?

  • tip

    • osv 添加自己的 c++ app 程序

    • 如何在一台机器上起多个 osv vm_osv 怎么登录不同的主机

    • osv 编译的 image 在不同机器上运行(同一个操作系统) 可以在物理机上跑吗

  • share

    • 温故而知新

algorithm 🔝

review 🔝

Here are the 7 brain reasons to make reading a habit.

  • It helps to strengthen your brain.

  • It reduces your stress.

  • It expands your knowledge.

  • It helps to improve your memory.

  • It improves your concentration.

  • It improves your communication skills.

  • It improves your mental health.

1、总结

本文讨论了使大型语言模型 (LLM) 可用于生产的挑战和策略,包括微调技术、解码策略、高效部署、护栏、服务指标和高级检索增强生成 (RAG) 方法。

2、摘要

本文深入探讨了使用大型语言模型 (LLM) 开发生产级应用程序的关键组件和注意事项。它涵盖了使用各种数据集和技术进行微调的重要性,例如监督微调和来自人类反馈的强化学习,以优化特定任务的 LLM。作者还强调了贪婪搜索、Top-k 采样、Nucleus 采样和光束搜索等解码策略在生成文本中的作用。通过量化、修剪和架构改进来解决高效部署问题,以克服计算瓶颈。引入护栏作为防止滥用和确保合乎道德地使用 LLM 的机制,同时强调服务指标对于监控用户体验和性能至关重要。最后,本文探讨了先进的 RAG 技术,这些技术涉及使用检索到的上下文来增强 LLM 响应,以提高准确性和相关性。

3、观点

  • 作者认为,对高质量的数据集进行微调可以显著提高 LLM 的性能。

  • 有一种观点认为,如果设计得当,从人类反馈中强化学习可以产生比监督微调更好的结果。

  • 这篇文章指出,护栏虽然对于指导 LLM 是必要的,但会带来延迟并增加成本。

  • 作者暗示,高效的 LLM 部署至关重要,可以通过量化和架构改进等技术来实现。

  • 有一种观点认为,RAG 可能比在特定主题上微调 LLM 更具成本效益,并且可以减少幻觉的可能性。

  • 作者表达了监控高级指标的重要性,例如实时系统的首次令牌时间和延迟。

  • 本文建议,用户反馈可用于通过使用嵌入适配器来改进 RAG 系统中的检索过程。

  • 作者鼓励读者参与到内容中来,邀请他们对其他注意事项发表评论,并关注他们的工作以获取有关 LLM 的更新。

1、总结

本文讨论了监管人工智能的复杂性以及行业内对自我监管框架的需求。

2、摘要

文章首先强调了对人工智能监管的频繁呼吁,但承认由于人工智能技术的多层次性而带来的挑战。它提到了正在进行的关于在何处应用监管政策的讨论,考虑到人工智能的各个组成部分,例如大型语言模型、数据集、云托管提供商和个人用户。然后,本文区分了政府法规和自我监管,并提供了每种法规的示例。它讨论了欧盟、英国和美国人工智能监管的现状,以及建立一个新的政府机构来监控人工智能技术的想法。本文还探讨了自我监管的概念,与其他行业进行了类比,并建议需要一个元组织来监督生成式人工智能。文章最后表达了作者的观点,即自我监管框架比政府干预更可取。

3、观点

  • 作者认为,虽然人工智能监管的必要性是显而易见的,但人工智能技术的复杂性使得确定在哪里应用监管政策具有挑战性。

  • 作者认为,由于人工智能堆栈的复杂性和对创新的潜在影响,政府监管可能不是监管人工智能的最佳方法。

  • 作者认为自我监管是人工智能监管的更好选择,并与其他成功实施自我监管机构的行业相提并论。

  • 作者建议需要一个元组织来监督生成式人工智能,类似于元宇宙标准论坛。

  • 作者对人工智能对社会可能产生的有害和不可预测的影响表示担忧,并建议如果不解决这些影响,政府干预可能变得必要。

  • 作者认为,白宫官员和科技公司 CEO 之间的最近会议是朝着自我监管迈出的积极一步,但考虑到公司利益和人工智能行业的竞争性质,它将如何有效。

  • 笔者认为,人工智能科技公司应形成健全透明的自律框架,以应对人工智能带来的潜在风险和挑战。

tip 🔝

root@bamboo-VirtualBox:~/osv# cd ~/osv/apps
root@bamboo-VirtualBox:~/osv/apps# mkdir cpp-example

root@bamboo-VirtualBox:~/osv/apps/cpp-example# cat Makefile
module: hello_world.so
CFLAGS = -g -fPIC
CC = g++
%.o: %.cpp
        $(CC) -c $(CFLAGS) -o $@ $<


hello_world.so: hello_world.o
        $(CC) -shared -o $@ $^
clean:
        rm -f hello_world.so *.o
root@bamboo-VirtualBox:~/osv/apps/cpp-example# cat hello_world.cpp
#include <iostream>
using namespace std;
int main(){
        cout << "hello world!" << endl;
        return 0;
}
root@bamboo-VirtualBox:~/osv/apps/cpp-example# cat usr.manifest
/tools/hello_world.so: ${MODULE_DIR}/hello_world.so
root@bamboo-VirtualBox:~/osv/apps/cpp-example# cat module.py
from osv.modules import api


default = api.run('/tools/hello_world.so')

编译及执行

./scripts/build image=cpp-example
./scripts/run.py -nv --verbose

说明:osv 的 app 类似于 linux 中的编译运行内核驱动,编译自己的模块,然后启动的时候注册运行(osv 本身就只有 kernel space)

在一台机器上起多个 osv,需要注意的是为虚拟机设置 mac 地址,要不然每次起虚拟机的时候都是相同的默认 mac,造成获取的 IP 地址相同

root@bamboo-VirtualBox:~/osv# ./scripts/run.py -nv --novnc --nogdb --verbose
OSv v0.24-90-gabf49c0
4 CPUs detected
Firmware vendor: Bochs
bsd: initializing - done
VFS: mounting ramfs at /
VFS: mounting devfs at /dev
net: initializing - done
vga: Add VGA device instance
eth0: ethernet address: 52:54:00:12:34:56
virtio-blk: Add blk device instances 0 as vblk0, devsize=10737418240
random: virtio-rng registered as a source.
random: <Software, Yarrow> initialized
VFS: unmounting /dev
VFS: mounting zfs at /zfs
zfs: mounting osv/zfs from device /dev/vblk0.1
VFS: mounting devfs at /dev
VFS: mounting procfs at /proc
random: device unblocked.
program zpool.so returned 1
BSD shrinker: event handler list found: 0xffffa00001bd3580
        BSD shrinker found: 1
BSD shrinker: unlocked, running
[I/42 dhcp]: Waiting for IP...
[I/245 dhcp]: Server acknowledged IP for interface eth0
eth0: 192.168.122.89
[I/245 dhcp]: Configuring eth0: ip 192.168.122.89 subnet mask 255.255.255.0 gateway 192.168.122.1 MTU 1500
hello world!
Uncaught signal 2 ("Interrupt"). Powering off.
root@bamboo-VirtualBox:~/osv# vim core/dhcp.cc ^C
root@bamboo-VirtualBox:~/osv# ./scripts/run.py -nv --novnc --nogdb --mac "52:54:00:12:34:5D" --verbose
OSv v0.24-90-gabf49c0
4 CPUs detected
Firmware vendor: Bochs
bsd: initializing - done
VFS: mounting ramfs at /
VFS: mounting devfs at /dev
net: initializing - done
vga: Add VGA device instance
eth0: ethernet address: 52:54:00:12:34:5d
virtio-blk: Add blk device instances 0 as vblk0, devsize=10737418240
random: virtio-rng registered as a source.
random: <Software, Yarrow> initialized
VFS: unmounting /dev
VFS: mounting zfs at /zfs
zfs: mounting osv/zfs from device /dev/vblk0.1
VFS: mounting devfs at /dev
VFS: mounting procfs at /proc
program zpool.so returned 1
BSD shrinker: event handler list found: 0xffffa00001bd3580
        BSD shrinker found: 1
BSD shrinker: unlocked, running
[I/42 dhcp]: Waiting for IP...
[I/245 dhcp]: Server acknowledged IP for interface eth0
eth0: 192.168.122.96
[I/245 dhcp]: Configuring eth0: ip 192.168.122.96 subnet mask 255.255.255.0 gateway 192.168.122.1 MTU 1500
hello world!

我们使用上文中的 cpp-example app

直接拷贝 image 到其他机器上,执行 start_vm.sh 脚本,注意需要通过 brctl 配置 virbr0 interface, 你也可以通过安装 libvirt 来实现。osv 本身提供 capstan 来管理 image

root@bamboo-VirtualBox:~/test# ls -al /root/osv/build/last/usr.img
-rw-r--r-- 1 root root 11534336 May  9 18:19 /root/osv/build/last/usr.img

usr.img 的大小才 11M,所以 osv boot 的时间那么快

root@tis-S2600WT2:~/osv# ls -al
total 11280
drwxr-xr-x 2 root root     4096 May  8 20:44 .
drwx------ 6 root root     4096 May  8 20:44 ..
-rwxr----x 1 root root      103 May  8 20:44 qemu-ifup.sh
-rw-r--r-- 1 root root      437 May  8 20:44 start_vm.sh
-rw-r--r-- 1 root root 11534336 May  9 13:30 usr.img
root@tis-S2600WT2:~/osv# cat qemu-ifup.sh
#!/bin/sh
export OSV_BRIDGE=virbr0
brctl stp $OSV_BRIDGE off
brctl addif $OSV_BRIDGE $1
ifconfig $1 up
root@tis-S2600WT2:~/osv# cat start_vm.sh
qemu-system-x86_64 -m 2G -smp 4 -vnc :2 -gdb tcp::1234,server,nowait -device virtio-blk-pci,id=blk0,bootindex=0,drive=hd0,scsi=off -drive file=usr.img,if=none,id=hd0,cache=none,aio=native -netdev tap,id=hn0,script=qemu-ifup.sh,vhost=on -device virtio-net-pci,netdev=hn0,id=nic0 -redir tcp:2222::22 -device virtio-rng-pci -chardev stdio,mux=on,id=stdio,signal=off -mon chardev=stdio,mode=readline,default -device isa-serial,chardev=stdio

share 🔝

1. 温故而知新

在上一篇中曾提到要坚持写文档,这一目的在于积极的沉淀,将此时此刻的想法记录下来,但这还远远不够,因为人是有健忘性的,写了不回头来看其实也没用(类似于论语中的 "学而不思则罔,思而不学则怠"),为什么想到这个,因为我昨天(2024.05.16)翻看了前面的一些 share 主题,发现很多都很陌生,甚至完全没印象,仿佛不是我记录的一样,还是看得少了。

回顾了一遍之后,发现很多都写得很好,主要在于之前的 share 主题大多来自 medium 文章或者当时那一刻的内心想法,所以现在回头去看会有种 "比较深刻" 的感觉,这一点其实跟上一篇的主题是类似的,还是要敢于记录,将此时此刻的想法记录下来,并赋予时间 tag 的属性(比如在 2024.05.17 去看 2023.05.17 的文档会有别样的感觉),当后来再 review 的时候会有跟当时不一样的体会。

readme | previous | next

最后更新于

这有帮助吗?