我们正在通用人工智能的前夜。ChatGPT 在激发了全世界热情的同时,也引燃了AI大模型的竞赛。Google推出Bard 对标, Amazon 也加入战场, 豪赌元宇宙的Meta也不甘示弱,推出了LLaMa和SAM。 大洋这边,公认手握最多资源的 BAT 再次在生成式模型上相遇。而具身智能乘着大模型的东风,似乎也在酝酿一场巨大的变革。
! G; h1 k' p. r! c1 C一切仿佛又回到了十年前,创业热潮涌现。只是这一次,通用人工智能的奇点由大模型开启,而数据正式站到了舞台中央。( U' I) Y- g# }, {
开发大模型的关键要素是什么
, l6 f; ]! L) r; W' Z$ M p( E }. e- I, ]4 `, i& ?* }
算力让大模型成了有钱人的游戏
6 U3 h7 p: g2 X5 [1 p" I# B; H6 ]" H+ j
" e9 Z: _) U: P- Q大模型, 通俗来说就是参数量巨大的模型。相较于之前单个GPU就能运行的小模型,只能靠大公司巨量的算力堆叠才有可能完成。例如OpenAI ChatGPT 目前每次训练成本高达百万美元。小实验室参与人工智能浪潮的可能性被大模型直接宣告结束,只有雄厚积累的公司才能完成。4 J1 {4 `5 L* K1 \0 x2 B
所以通用大模型创业潮中浮现的只有当年互联网创业潮中有过精彩故事的英雄, 美团王慧文,创新工场李开复,搜狗王小川。而模型的摩尔定律已经出现,更大的模型带来了更好的世界理解能力、推理能力, 趋势如此,已经没有停下来犹豫的时间。
7 w* }4 i! s4 y. }1 i" _! U
1 W9 @: L$ o( R
) y" { @2 H" r% m H. f) D
# f' _: Q) k8 y: S
4 r' W" ?' S% e) U7 ?. b算法模型为中心的开发模式已过 6 v. ~" l P; r& F A8 G8 W# Y
* @. V4 M, X( s& R! W2 H目前普遍人工智能公司的开发模式仍旧是以模型为中心的“传统”开发模式,即将数据集固定进而迭代模型。算法工程师们通常会聚焦于几个基准数据集,然后设计各式各样的模型去提高预测准确率。7 z. W: [8 F$ e) X2 @
虽然大模型如雨后春笋般浮现,但是实际上大部分模型背后的算法都趋于一致,并未出现大的模型改动。 而数据量的堆叠让训练好的模型表现远远优于小改动的模型。比如数月前,人工智能先驱Yann LeCun发文称ChatGPT在技术上并不是什么新鲜事物, 但是却取得了优异的表现。精心的算法改动,很有可能并不能比添加、迭代数据产生的效果更好。而巨量优质数据带来的模型表现,相较于某一单独数据集上训练模型的表现,是降维打击。
$ l: @* z1 c- K( {
1 H& ?% M F6 d" p* D
5 n' o, L. k7 L
0 m, g; @8 M) m+ r, A数据成为大模型开发核心要素
0 J) L% [$ d4 q. y+ }, z# H" o4 Z# H/ R% s. ^3 A
* V, Z9 N* }; @) N( I. C; A8 D
OpenAI大模型的成功正是出自Ilya对于大数据大模型量变带来质变的坚信。例如ChatGPT 用了至少40T的大规模数据进行训练,而且如果有效数据量继续增加,其能获得更好的表现。根据Google研究 Emergent Abilities of Large Language Models,在模型参数的某一个临界点, 突然模型获得了令人意想不到的能力。 B1 d& |, V9 b
- G* ~" t4 {* w5 }
3 I4 J5 \. [* `4 C: I# a
而为了保证如此多的参数能够获得合理的训练,高质量的数据成了关键钥匙。以ChatGPT的发展为例,GPT-1只用了4629 MB 的文本数据, 而GPT-2 用了40 GB 来自Reddit 上爬取并筛选的文本, 而GPT-3 用了至少45TB的纯文本,GPT-4的具体训练过程并没有披露, 但是鉴于GPT-4的推理速度比GPT-3慢很多,模型的参数数量可以推测出也变多了,进而对应的训练数据显然需要更多。这些高质量的数据是ChatGPT 首先出现在英文世界的重要原因,英文的训练文本比中文的训练文本更为规范和丰富。/ O1 f3 T7 ^) Y& h# c% n
中国人民大学交叉科学研究院院长杨东也认为:ChatGPT能够成功的根本原因不仅仅在于技术本身,国内存在严重的数据不开放、数据垄断问题也是一大原因。而最近Meta 发布的语义分割模型Segment Anything Model, 整体有监督的模型并没有明显创新, 但是在语义分割领域海量数据的使用,让模型的表现令人惊叹。千万级的图片量和十亿级的分割Mask,是图像语义分割领域从未出现过的。9 l+ |7 l1 M8 P/ G7 n
9 {8 P( S( I+ Q; x
* l* R8 L1 y' j6 g7 \1 E& t
AI的开发模式正从以模型为中心转向以数据为中心。数据从何获取,世界上的数据够大模型们用吗?
) F1 U4 W7 r/ X( K' g8 c8 [' o真实数据会被大模型用尽
: n. Y [; h& i' f
3 g- j& P$ z2 _" Q1 K这个世界上,人类活动无时无刻不在进行,因此留下的数据痕迹不应该是不断增长的吗?为什么会被耗尽呢?
2 f% Z5 g9 X* w9 g# _: \/ N$ W1 A高质量的数据是稀缺的$ W5 n' @1 k" ~- w+ r+ X5 Z
& v/ M F' h1 K并非所有人类活动产生的痕迹都能用于模型训练,只有高质量的数据进入模型训练中才能产生最好的效用。, G# m! P _( I5 i+ T/ c# [
在自然语言处理领域,高质量数据自然是数字化书籍和科学论文。拥有较好的前后逻辑关系,也能保证相对正确。而低质量数据例如聊天记录、电话等, 由于数据连续性不强,对训练的作用也相对有限。在ChatGPT 3 的开发文档中提到,数据过滤在对45TB的纯文本进行质量过滤后,获得了570GB的文本,仅仅使用了1.27%的有效数据。4 R4 Z8 C+ z9 R9 ?6 V& }1 [
在自动驾驶领域,高质量的数据是大量不同场景产生的。 例如曲率相对较小的道路可能出现的频率非常高,但是实际上,出现次数越多,其重要性越弱。 反而一些不常规的场景(即Corner Case),数据的质量更高,也需要单独对其做场景适配。而这些相对较小的样本,面对大模型的参数要求,几乎是杯水车薪。 i+ ^! C, V% s9 J
数据安全和隐私带来的局限性
# m1 P5 L4 g) a7 D2 f
7 A# R8 p" h9 Z2 @Generative AI 的发展一直伴随着数据安全的争议。 Stable Diffusion 开放使用之后,就引起了众多艺术家的不满,迫于压力,Stability AI 宣布允许艺术家们定向删除自己的作品,阻止其进入训练集中。
/ N% p& h' F+ z: ]; V3 K+ K7 j. J在某些情况下,公开数据可能包含敏感信息,如个人身份、财务信息或医疗记录等。在许多行业和地区,包含敏感信息的数据是非常难以获取的, 这提高了数据收集的难度,也降低了对应数据集增长的速度。也就成为了行业大模型的掣肘。例如医疗领域, 由于领域的特殊性及私密性,在严格的隐私保护和法规限制下想要获取到可以用于大模型训练的数据量,无异于天方夜谭。7 J$ H0 X9 W$ T' {: o
高质量的真实数据可能不足以支持大模型的训练' `1 D/ Y( p) v6 s4 R; |+ g
- ?- H: C! m* r( p
论文《Will we run out of data? An analysis of the limits of scaling datasets in Machine Learning 》探讨了数据短缺(数据量不足以满足大模型训练的需要)的可能性, 按照目前的模型的增长速度,到2026年左右,高质量的NLP数据将会不足以支持训练。语言和视觉模型的数据存量的增长速度比训练数据集的大小慢得多,所以如果按照目前的趋势继续下去,数据集最终会因为数据枯竭而停止增长。6 P/ d% i( J) o, L- P: I2 S
在数据量越来越多的情况下,在非可控的数据收集方式中,大部分数据的收集是没有任何意义的。例如自动驾驶场景,车辆在路上不断收集新的数据, 但是实际能够被使用的只能是凤毛麟角。因此,在最近一次Nvidia CEO 黄仁勋 与 Ilya Sutskever的对谈中,他们也探讨了数据被耗尽的可能性。
1 f( O$ F+ e* z4 m) k& F合成数据可以满足大模型的巨量数据需求
! w7 V7 w- |! T$ y+ v+ ?* ^/ r; u9 s/ h) B2 X" V
以数据为中心的开发模式让数据成了最重要的一环。训练算法需要数据,可是高质量的数据却难以获取,大模型巨量的数据需求应该如何被满足?" }+ ?1 ~8 C4 |4 B: t/ j$ r/ |
正如在食物上有合成肉一样,数据是否可以被人工合成呢?合成数据是在数字世界中创建的数据。 合成数据的可控性相较于真实数据更好,可以在数学和物理意义上反映真实数据的属性,可以定向生产的数据,保证训练模型时数据的均衡性。9 k9 P/ w N$ p4 Q b3 I4 R1 E
合成数据具有信息增量
, j* T5 T# |& n2 n' w
4 D4 m T, f4 s0 c0 C0 W在真实数据中学习到数据的分布,并且依据这种分布生产出更多的数据,保证多样化的场景下都有足够的数据用于大模型的训练。不同元素的组合带来了不同的场景,场景的变化也就带来了信息的增量,进而保证了合成数据的有效性。
$ I" q. U+ m' ]( D- m* n8 C( n1 K根据OpenAI 和 UC Berkeley 在2017年的研究, 以实际场景出发,泛化摄像头的位置,物体颜色,形状,光照等, 生成大量的合成数据用于物体检测模型的训练。 在完全没有使用真实数据的基础上, 检测模型的3D误差保持在1.5cm以内,而且具有了非常好的鲁棒性。6 i* |: N9 w# g! n
, z* w* M6 u$ ?' t
1 d' {$ ^$ T! Z3 V$ ]例如在自动驾驶领域, 一个典型的真实的前车Cut-in 场景,可以通过合成数据进行泛化天气和光照再生产。由此产生的数据训练模型之后, 模型也就在不同的天气和光照下有了更加鲁棒的性能。根据Nvidia 2018年的研究, 使用随机化车辆位置和纹理的情况下生产的合成数据训练模型,检测模型的性能有了明显的提升。这归功于合成数据车辆的位置分布更加均衡,产生的数据也分布范围更广。
3 s Y+ c/ a% t, X* B2 F6 D. G4 a
, z$ E/ U' z8 R( y; |
' |4 L# J q/ x2 Y5 J' ]合成数据的可控性相较于真实数据更好,可以在数学和物理意义上反映真实数据的属性,可以定向生产的数据,保证训练模型时数据的均衡性。在定向生成数据时, 也就有了定制化大模型特性的可能性,例如希望语言类大模型在回答某些问题时有偏向性,在生成某些图片时有特别的风格和元素。这些都可以通过定制合成数据完成。0 z& M6 l) K) x" ]; c2 R" d1 v
基于真实数据,但是又与真实数据不同。合成数据的这种特质使得其的应用范围越来越广泛,不仅仅用于测试,也能够成为训练数据,让模型能力更加强大。
/ g2 ?! a1 x& o0 [合成数据的成本优势巨大7 i) W3 {5 b6 k2 `; K' }$ B
; T$ I& }, V6 P& E1 s7 l1 \2 L
数据的成本来自于采集和标注,在这两部分,合成数据都有显著的优势。5 R2 e% f+ _$ T5 W
相对于真实数据低效的收集方式, 合成数据可以定向生成场景,让每一个字节的数据都是有价值的。不需要大量的数据采集团队,也不需要大规模的数据回传系统和数据筛选系统,合成数据从生产开始就根据模型训练的需求出发,大部分产出都可以直接使用,也就降低了数据采集成本。
3 q: _- D+ F. h1 C" n6 i同时, 合成数据标注成本相较于真实数据有非常大的优势,根据数据服务平台Diffgram 的估算, 在自动驾驶图像标注上,平均一个标注框价格约为0.03 美元, 整体一张图完整标注约为5.79美元, 而对于合成数据,标注价格基本接近于零, 有的只是数据计算成本, 只需要约6美分。总之, 合成数据可以更加可控地,更加高效,并且低成本批量生产海量数据,用于大模型的训练。
2 a/ c, A; s! t( L, n7 |如果说真实数据的收集还停留在刀耕火种的农牧时代, 那合成数据的生产就进入了高效自动的工业时代, 低成本提供大规模高质量的产品。根据《MIT科技评论》将合成数据列为2022 年全球十大突破性技术, 认为合成数据可以解决数据资源不丰富的领域人工智能发展缓慢的现状。3 U( V1 c* W- ]- q" N% x: G
哪个行业会需要合成数据?
' v# I1 G# a: X5 x1 w; L4 z& m1 V0 {3 Q6 u; \% h) v. y
事实上在国外,合成数据已经有了较为广泛的应用,机器人领域,自动驾驶领域,自然语言处理, 金融,医疗等等,我们都能看到合成数据的身影。
$ p9 h# o6 L) y7 M+ M早在2018年,OpenAI 就使用仿真模拟环境对机器人控制器进行训练,训练过程会随机环境动态, 然后把控制器直接应用在实体机器人身上,通过这种方式让机器人在执行简单任务时,可以应对外界环境预料之外的变化。$ q/ o" I# {% w$ A2 \2 e
. z. n$ V6 H+ S% ^. q) }1 L

f0 P l, c$ x2019年根据摩根大通的报告,其使用合成数据去进行金融欺诈检测模型训练,以克服金融欺诈数据极少的问题。
: l7 B" L5 D" D" `斯坦福大学最近也发布了自己的70亿参数的对话大模型Alpaca,尤其有趣的是,研究所涉及到的数据集, 是团队用OpenAI 的API生成的, 也就是说,整个训练数据集完全由合成数据组成,并且最后效果也比肩GPT-3.5。
* H9 E& V9 o. T) x再以自动驾驶为例,作为计算机视觉的重要落地应用,自动驾驶行业已经在合成数据的使用上走的很远了。为了降低测试成本,提高迭代效率,行业内广泛使用仿真引擎来进行自动驾驶算法的测试和验证。
& l. s* o, s( [* d基于视觉的自动驾驶功能需要采集海量的真实场景数据来训练深度学习模型,用以完成对世界的感知。然而量产的长尾数据通常难以在真实世界中进行采集,或者无法采集。同时,在不同时间和天气条件下,即使同一物体的外观也会有很大差异,这给视觉感知带来极大的挑战。 % f6 F: ]5 A+ v4 t+ {
相较真实数据的采集,合成数据的成本可控,且无需人工标注,大大减少了因数据采集流转流程以及人为标准不一致所带来的人为误差。因此合成数据被业界认为是解决长尾问题的有效方式之一。
% q( `0 Z" Z( I& X, l; Z但是为了更好地训练自动驾驶系统,大部分仿真数据的质量是远远不够的, 它们无法反映真实世界,只是真实世界的高度抽象。所以业界很多公司在提升数据的真实度上投入巨大, 例如Nvidia的自动驾驶仿真软件DriveSim采用先进的物理渲染技术,让合成数据的真实度得到提升。
: R; K; ?1 b, y5 q+ O7 J# x, R0 V+ G. ]$ m# [, l( Y
" ^: x7 A* x Q! Z* ~, B! u& ^$ a- \
Cruise和Waymo使用NeRF 相关技术生成数字孪生世界进而生产合成数据, Nvidia 也在2022 年提出Instant NGP, 极大提升了NeRF的训练效率。1 z' p# U# I! x% D- C- r
$ w$ K [1 p! m- D1 g

/ I% k5 ^7 e% o _: vTelsa 早在2021 年的AIDay 上就用高速上奔跑的一家人场景和难以标注的人群训练了感知系统,令人印象十分深刻。; ?5 o. Z* t+ Y0 t/ Z' s4 I# n% b1 c
1 S/ C5 t$ j- @( V% b
8 N( ?7 p; L# v9 g# u/ [
与此同时,在行业前沿的硅谷众多合成数据公司开始涌现,为自动驾驶服务的Parallel Domain、Applied Intuition、为广义机器视觉行业服务的Datagen、扎根自然语言处理的Gretel ai,这些公司背后站着行业领先的巨头们。* H: u. C `. F6 X$ r
Gartner预测称,2024年, 60%的训练数据会由成数据取代,而 2030年合成数据将彻底取代真实数据,成为训练AI的主要数据来源。 0 }: B) Z# Y$ X, W- E9 s- K7 u
但是国内,实际上合成数据的应用相对较少,目前大部分公司还是使用真实数据去完成模型的训练。
; n' b& O+ m# F0 o7 J合成数据的局限: ^& O9 }- ~0 \& n& o
4 i& g+ ]0 ?8 j7 x6 c7 i2 s$ I在完全取代真实数据之前, 合成数据还有哪些问题需要被解决?这里以自动驾驶为例做一些探讨。/ i. t4 g6 o1 f
真实度
0 w+ R$ Z* o. Q% G& `
% r! V4 D# @3 m. @! v! h从感知的角度看, 真实度确实是第一评价指标。在这批数据进入训练系统前,是否能通过人类的视觉第一性检验,保证看起来真实?# K% c5 Q" V- j9 B; Q" O% _# N2 h
对于真实度的劣势,肉眼所及的真实并不代表数据的真实效用, 一味地追求图片视觉的真实度可能并不具备实际可量化的意义。评价合成数据真实度的量化标准需要建立在合成数据集对于经过合成数据集训练的算法在真实数据集上的提升上。目前,在对合成数据真实度要求最高的自动驾驶行业,已经有Cruise、Nvidia、Waymo、Tesla等基于合成数据实实在在有效大幅提升算法在真实道路上表现的实例。当然,随着算法的提升,对于合成数据真实度的要求也会水涨船高。而生成式AI近期的不断突破又给了我们很好的增强合成数据真实度的切实方向。1 R: p8 V- P- R0 r
场景的多样性 m3 X# g4 R* ~" j
/ f( U# ?% o1 j+ u0 l/ e# X合成数据世界模型的构建,例如自动驾驶场景的构建。 我们需要创建一个虚拟世界,并且模拟真实世界的运行,让合成数据如泉水般流淌出来。传统方式会基于人工算法建模来实现,比如传统合成数据生产商纯基于物理引擎的构建方式决定了场景构建的速度,整个物理世界需要3D 资产工程师们手动搭建,一个建筑,一个路牌都需要手动放置,这也就制约了场景的构建速度,也极大限制了场景的多样性。而生成式AI如Diffusion Model、Nerf为合成数据的产线提供了以数据为中心,自动化建模的可能性。+ D$ [4 V) o* w, m
人工搭建的场景让合成数据的泛化性受到了极大的限制,毕竟我们希望训练的算法具有足够高的鲁棒性,能够直接在真实世界中有足够好的表现。
) A& E2 W* I% r. Z. G显然,用人工搭建的方式无法覆盖真实世界中的每一个场景,为了创建足够覆盖真实世界的所有数据, 我们需要学习到真实世界的隐式表达,进而生产足够多样的场景。这必须依赖生成式AI。
* \7 i% }$ l! s3 l5 Q p生产效率
/ C, x- k- R8 R* _4 K/ C
: g' I' K6 x `+ s为了快速提供大批量、高泛化性的数据,云端大量并行生产是第一要义,用高算力支持数据的快速生产能让数据以真实世界中无法比拟的速度合成。
" y! x3 h- {5 f0 K: t+ i! S4 m: @生成式AI让合成数据大规模取代真实数据成为可能
% k z4 {4 J+ g1 kNVidia 黄仁勋认为,人类的反思和梦境都属于合成数据的一部分,这相当于AI生成数据去训练AI。为了满足大模型的巨量数据需求,我们需要完全自动化合成数据的生产链路, 让AI训练AI成为可能。
5 [1 |7 {' v, z1 m5 Z得益于最近发展迅速的Diffusion Model 和 NeRF, 高质量的AI合成数据不再是幻想。Diffusion Model 的基于马尔科夫链的精巧数学过程让更大,更稳定的图片生成模型成为可能, 也克服了对抗生成网络训练难度太大的问题。 Stable Diffusion Model 用巨大的图片集让人们看到了Diffusion Model 的无限可能,而ControlNet 相关网络的提出也让特定领域的适配变得更加便捷。/ r' g9 `$ ?) `
8 u. `7 S" z6 q* _
9 y( v/ e, O5 p; Y; r
而NeRF( Neural Radiance Fields) 将3D 世界的构建变成一个神经网络的学习过程,将神经场(Neural Field)与体素渲染有效结合在一起,能够非常逼真地重建3D世界,非常有希望取代繁琐的物理引擎构建过程。 Waymo 基于此技术发展了BlockNeRF, 将旧金山高效重建出来,并且在其中进行合成数据的生产。
" ]3 e7 W/ O! n
, o+ D4 R1 E7 B9 X: V- ]5 {
# B- M+ D* L7 h6 P' d5 Y- L
https://www.zhihu.com/video/1673672779202404352
2 Y: W& r u/ b' H* @9 B0 H基于这些技术,AIGC独角兽开始出现。 StabilityAI(Diffsion Model)、Midjourney(Diffusion Model)、LumaLab AI (NeRF)用大批量的数据训练之后,图片的真实性已经无法被质疑,而由此产生的艺术效果和新数据的表现方式让我们看到了合成数据泛化的光明未来。' W7 h& v9 W/ V6 S8 o
写在最后% X; b- H$ A+ k3 O, X; Q4 T/ d& U
; y3 c. _9 S; n. f. vChatGPT 只是起点,自然语言领域的大模型也只是星星之火。虽然ChatGPT 已经基本具备初级人工智能的能力,这种能力是通过学习人类自然语言数据获取的,但是实际上,人类对世界的认知思考绝对不仅仅局限在语言和文字, 而是多模态的(图、文、声、光、电、影……)。不难推论,真正的AGI必须能像人类一样即时、高效、准确、符合逻辑地处理这个世界上所有模态的信息,完成各类跨模态或多模态任务。
D/ {) c; r, }而这也就需要多模态的数据, 这又进一步加大了真实数据的获取难度,多模态的真实数据更加稀缺。 ( ` J6 S% Z, I& E8 x: `5 W4 |
例如相较于随处可见的文字数据,图片数据,对应的高质量的3D数据集屈指可数。常用的科研图像数据集通常都包含上亿或更多图片,而很多质量较高,可用于科研的3D数据集只有数千或数万个3D模型。如果我们希望人工智能可以理解3D 世界,势必需要大量包含3D 模型的多模态数据。 这可能也需要合成数据去解决。$ |% {( N( @" W" U/ V j& q
自动化构建世界模型、让AI可控生成多模态数据、去训练出更加智能的大模型才是真正通向通用人工智能的道路。" G3 c% [$ X! S: m0 Z7 f
3 k5 z$ M& Q9 p* _6 b b1 p
参考
' A2 b5 W3 U% n$ S D; q. j
# |! O" m: _$ `7 n: A0 X$ l U6 M5 w! r- V% K2 k7 f: K: \0 C7 }
- https://encord.com/blog/segment-anything-model-explained/#h18
# X% p0 Y# Y3 ^5 s M - https://www.leiphone.com/category/academic/lotDInkoghMK3rr0.html
5 W5 M$ {! s, ~7 ^5 F6 Z% w6 N - https://m.huxiu.com/article/787292.html- q) P( E- r2 ]- E- n, c3 M( z
- GPTs are GPTs: An Early Look at the Labor Market Impact Potential of Large Language Models
% k4 r) T1 Q& M" q( d - https://huggingface.co/blog/zh/large-language-models# C" u: J9 K' V4 y* j: C3 J
- https://github.com/daochenzha/data-centric-AI
) ?: @, X, ?: v' K$ @( C - https://www.forbes.com/sites/robtoews/2022/06/12/synthetic-data-is-about-to-transform-artificial-intelligence/?sh=1173ede27523& ^/ x7 w2 O2 R2 f. V0 c8 y& J" x
- https://diffgram.com/main/pricing-data-labeling-diffgram-labelbox-scale-ai
! l' U" ~% {" L( q - https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf
0 V7 k2 F) W6 G" V% S" t - https://d4mucfpksywv.cloudfront.net/better-language-models/language_models_are_unsupervised_multitask_learners.pdf( D! G, k! C7 A( \9 @# d
- https://arxiv.org/abs/2005.141657 m6 D+ z9 |/ |$ ~3 \- t
- https://arxiv.org/abs/2203.02155* r4 F$ J1 g, ?9 w/ k# j1 O
- https://crfm.stanford.edu/2023/03/13/alpaca.html! U( j0 `; A# M. d
|