分类 分享 下的文章

使用 docker system df 来查看 Docker 整体占用了多少磁盘空间,类似 Linux 的 df,但统计对象是 Docker 的镜像、容器、数据卷和构建缓存。

示例输出:

TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          10        3         5.2GB     3.1GB (59%)
Containers      5         1         120MB     80MB (66%)
Local Volumes   4         2         2.0GB     1.0GB (50%)
Build Cache     20        0         800MB     800MB

各列含义:

  • TYPE:Docker 对象类型

    • Images:镜像
    • Containers:容器
    • Local Volumes:本地数据卷
    • Build Cache:构建缓存
  • TOTAL:该类型对象总数
  • ACTIVE:正在被使用的数量

    • 镜像:被容器使用的镜像数
    • 容器:运行中的容器数
    • 卷:被容器挂载使用的卷数
    • 构建缓存:被使用的缓存数
  • SIZE:占用的磁盘空间
  • RECLAIMABLE:预计可清理回收的空间,括号里是占比

常用用法:

docker system df

查看详细列表:

docker system df -v

清理命令:

docker container prune   # 清理停止的容器
docker image prune       # 清理悬空镜像
docker image prune -a    # 清理未被使用的镜像
docker volume prune      # 清理未使用的数据卷,谨慎,可能丢数据
docker builder prune     # 清理构建缓存
docker system prune      # 清理未使用的容器、网络、镜像、缓存

注意:RECLAIMABLE 是估算值,因为镜像层可能被多个镜像共享,实际回收空间不一定完全等于这个数字。数据卷如果还有重要数据,不要随便 prune。

在 Transformer 的 Attention 机制中,$Q$ 和 $K$ 的点积公式是 $Q \cdot K^T = \sum_{i=1}^{d_k} q_i k_i$。
假设 $q$ 和 $k$ 的每个维度都是均值为 0、方差为 1 的独立随机变量,那么点积结果的方差就是 $d_k$(方差累加),标准差就是 $\sqrt{d_k}$。
当 $d_k$(词向量维度)很大时(比如 512、1024),点积出来的数值自然就会很大,可能达到几十甚至上百。

Softmax 的公式是:$Softmax(x_i) = \frac{e^{x_i}}{\sum_{j} e^{x_j}}$。
指数函数 $e^x$ 有一个特性:数值稍微大一点,结果就会爆炸式增长。

如果输入的 logits 是 [10, 20, 30],那么 $e^{30}$ 会远远大于 $e^{20}$ 和 $e^{10}$。Softmax 的输出会变成 [极小, 极小, 接近1],这叫做 “饱和(Saturation)” 现象。
一旦 Softmax 的输出接近 One-hot 向量(即某个位置是1,其他全是0),它的导数(梯度)就会趋近于 0。在反向传播时,梯度就消失了,模型参数无法更新。

假设某个 Attention 有 3 个词,计算出的原始点积得分(未归一化)如下:

情况 A:不缩放(数值很大)

  • 输入给 Softmax 的得分:[10, 20, 30]
  • 计算指数:[e^10, e^20, e^30] ≈ [22026, 4.85亿, 1.06万亿]
  • Softmax 输出:[0.000000002, 0.00000045, 0.99999954]
  • 结果:Softmax 几乎变成了 [0, 0, 1]。
  • 梯度:此时如果模型预测错了,想调整参数,但由于输出概率要么是0要么是1,求导得到的梯度几乎是 0(即梯度消失),参数根本动不了,模型无法学习。

情况 B:缩放后(除以 $\sqrt{d_k}$)
假设 $d_k = 64$,那么 $\sqrt{d_k} = 8$。

  • 输入给 Softmax 的得分:[10/8, 20/8, 30/8] = [1.25, 2.5, 3.75]
  • 计算指数:[e^1.25, e^2.5, e^3.75] ≈ [3.49, 12.18, 42.52]
  • Softmax 输出:[0.06, 0.21, 0.73]
  • 结果:输出是一个平滑的概率分布。
  • 梯度:此时的梯度处于健康区间,模型可以通过反向传播正常更新参数。

所以缩放(除以 $\sqrt{d_k}$ )的作用就是把点积的方差拉回 1,让输入 Softmax 的值保持在合理的范围,避免模型进入梯度饱和区。

由于想要用 gpt6.1-sol 所以给codex升级了一下。然后运行就出现了

Error: 拒绝访问。 (os error 5)
To work without the background server, rerun the same command with --no-daemon (including resume or fork and its arguments).

让deepseek搜索了一下说是:
拒绝访问 (os error 5) 错误,在 Windows 上通常意味着 Codex 在安装或启动后台服务(daemon)时,权限被系统拒绝了。

解决:

不降级的方式:

  1. 使用 --no-daemon 模式:在命令后加上 --no-daemon 参数,这会绕过后台服务,让 Codex 直接在当前终端运行。缺点是CLI 会明显变慢,因为失去了后台服务的性能优化。
  2. 关闭后台服务自启:编辑配置文件 %USERPROFILE%\.codex\config.toml,添加以下内容,效果与上一种类似:
[features]
daemon_auto_start = false

降级的方式:

从社区反馈来看,这个问题主要是由 v0.157.0 及之后版本引入的新后台守护进程(daemon)机制导致的。因此,最直接有效的办法就是降级。

社区普遍验证 v0.156.1 是一个稳定可用的版本。

如果通过 npm 安装,先卸载再安装指定版本:

npm uninstall -g @openai/codex
npm install -g @openai/[email protected]

如果使用的是 独立安装程序,可以通过设置环境变量来指定版本:

$env:CODEX_RELEASE="0.156.1"
irm https://chatgpt.com/codex/install.ps1 | iex

清理残留:降级后如果问题依旧,可以尝试删除 %USERPROFILE%\.codex\packages\app-server-daemon 目录,让 Codex 重新初始化。

p.s.
楼主是使用的修改配置文件添加 daemon_auto_start = false ,成功解决。但是这样貌似就不会有守护进程的新特性了,不过从逻辑上来说要是降级了同样也没有这个特性。所以采用了简单的解决方式。对于降级的方式没有尝试,仅作记录。

很久之前就想给 typecho开发主题,但是一直没有闲下来。
最近得闲就打算开这个坑。

要搭建一个typecho的开发环境。
其实就是下载typecho,然后解压,php启动就行。把要开发的主题放到user的theme文件夹里面,然后就可以开发了。
本地php启动一个服务器

php -S 127.0.0.1:8080 -t typecho

先是看default主题里面的文件
404.php 就是404页面
comments.php 就是评论页面
footer.php 就是页脚
functions.php 类似于 utils 有自己实现的函数,typecho的逻辑是启动主题,访问任意一个页面会自动加载这个文件,所以其他文件不用引用就可以使用里面定义的函数
header.php 是页头
page.php 是独立页面
post.php 是文章页面
sidebar.php 是侧边栏
index.php 就是首页,从分类,标签,作者点进去也是这个文件

三个css
grid.css 提供了grid布局
normalize.css 覆写了一些 html标签 的样式,让所有浏览器表现一致
style.css 就是一些样式css

先是看index.php,里面有一些typecho实现的函数
need()
示例:
$this->need('header.php');
作用是引入php文件。typecho封装了这个方法,就不用手动引入,然后可以自己判断路径,防止重复引入。

is()
示例:
$this->is('index')
用来判断是什么页面

_t()
里面的内容会自动翻译然后有返回值给到一个变量

_e()
里面的内容会自动翻译然后直接输出

<h3 class="archive-title"><?php $this->archiveTitle([
    'category' => _t('分类 %s 下的文章'),
    'search'   => _t('包含关键字 %s 的文章'),
    'tag'      => _t('标签 %s 下的文章'),
    'author'   => _t('%s 发布的文章')
], '', ''); ?></h3>

这个主要是archiveTitle函数,会根据不同的页面显示不同的内容。也就是说在没有定义category等对应的页面时,访问index页面会判断具体是什么页面然后输出对应的内容。

typecho的路由规则

页面类型优先其次兜底
首页index.php--
文章详情post.phpindex.php-
独立页面page.phpindex.php-
分类归档category.phparchive.phpindex.php
标签归档tag.phparchive.phpindex.php
日期归档archive.phpindex.php-
搜索页search.phpindex.php-
404 页404.phpindex.php-

如果要自定义页面,官方给的做法是使用自定义模板。
先是创建一个 新的php文件,随便叫什么名字
然后文件开头加上

<?php
/**
 * test
 *
 * @package custom
 */
?>

那个 test 是模板名称,随便改,@package custom 是为了告诉typecho这是个模板
之后可以后台新加一个独立页面,然后自定义模板处选择 这个 模板