NVIDIA容器工具

使用apt:Ubuntu,Debian

这些说明适用于任何 Debian 衍生发行版。

  1. 配置生产存储库:

    1
    2
    3
    4
    $ curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
    && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

    (可选)配置存储库以使用实验包:

    1
    $ sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list
  2. 从存储库更新软件包列表:

    1
    $ sudo apt-get update
  3. 安装 NVIDIA Container Toolkit 软件包:

    1
    $ sudo apt-get install -y nvidia-container-toolkit

使用dnf:RHEL/CentOS、Fedora、Amazon Linux

这些说明适用于许多基于 RPM 的发行版。

  1. 配置生产存储库:

    1
    2
    $ curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
    sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo

    (可选)配置存储库以使用实验包:

    1
    $ sudo dnf-config-manager --enable nvidia-container-toolkit-experimental
  2. 安装 NVIDIA Container Toolkit 软件包:

    1
    $ sudo dnf install -y nvidia-container-toolkit

使用zypper:OpenSUSE、SLE

  1. 配置生产存储库:

    1
    $ sudo zypper ar https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo

    (可选)配置存储库以使用实验包:

    1
    $ sudo zypper modifyrepo --enable nvidia-container-toolkit-experimental
  2. 安装 NVIDIA Container Toolkit 软件包:

    1
    $ sudo zypper --gpg-auto-import-keys install -y nvidia-container-toolkit

配置

1
2
3
4
5
6
7
8
9
10
11
# 创建/覆盖 Docker 配置
sudo tee /etc/docker/daemon.json <<EOF
{
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
}
}
EOF
  1. 使用以下nvidia-ctk命令配置容器运行时:

    1
    $ sudo nvidia-ctk runtime configure --runtime=docker

    nvidia-ctk命令会修改/etc/docker/daemon.json主机上的文件。该文件已更新,以便 Docker 可以使用 NVIDIA 容器运行时。

  2. 重新启动 Docker 守护进程:

    1
    $ sudo systemctl restart docker

测试容器中NVIDIA使用

image-20250506113154047

1
2
3
4
5
# 尝试官方推荐的基础镜像
docker run --rm --gpus all nvidia/cuda:12.2.0-base-ubuntu20.04 nvidia-smi

# 或使用更通用的标签
docker run --rm --gpus all nvidia/cuda:12.0-base nvidia-smi

image-20250506113444321

1
docker-compose -f docker-compose.yml -f docker-compose.https.yml -f components/serverless/docker-compose.serverless.yml  up -d

cert.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no

[req_distinguished_name]
CN = 10.0.0.163 # 公用名
O = Agricultural Intelligence Laboratory # 组织
OU = Agri # 组织单位

[v3_req]
subjectAltName = IP:10.0.0.163 # 必须包含 IP 地址
basicConstraints = critical, CA:TRUE
1
2
3
4
5
6
openssl req -x509 \
-newkey ec:private.key \
-key private.key \
-out certificate.crt \
-days 36500 \ # 有效期约 100 年
-config cert.conf # 指定配置文件
1
2
3
4
5
6
7
8
9
10
11
# 生成 ECDSA 私钥
openssl ecparam -genkey -name prime256v1 -out private.key

# 生成自签名证书(单条命令)
openssl req -x509 \
-key private.key \
-out certificate.crt \
-days 36500 \
-subj "/CN=10.0.0.163/O=Agricultural Intelligence Laboratory/OU=Agri" \
-addext "basicConstraints = critical, CA:TRUE" \
-addext "subjectAltName = IP:10.0.0.163"

一、常用椭圆曲线类型(按密钥长度分类)

  1. 192 位曲线
    secp192k1:Koblitz 优化曲线,适用于资源受限设备。
    secp192r1(NIST P-192):随机参数曲线,兼容传统系统。
    适用场景:低安全需求场景(如旧版 IoT 设备),现已不推荐(安全强度仅等效于 RSA 1536 位)。
  2. 224 位曲线
    secp224k1:Koblitz 曲线,签名效率较高。
    secp224r1(NIST P-224):随机参数曲线,用于 TLS 1.2 等协议。
    安全强度:等效于 RSA 2048 位。
  3. 256 位曲线
    secp256r1(NIST P-256):行业标准,广泛用于 TLS、数字证书、SSH。
    secp256k1:比特币、以太坊等区块链采用,无后门争议。
    Curve25519:高效安全,用于 WireGuard、现代 SSH(Ed25519 签名)。
    安全强度:等效于 RSA 3072 位。
  4. 384 位曲线
    secp384r1(NIST P-384):高安全场景(如金融、政府系统)。
    Brainpool P384t:可验证随机参数,避免潜在后门。
    安全强度:等效于 RSA 7680 位。
  5. 521 位曲线
    secp521r1(NIST P-521):顶级安全强度,抗量子计算威胁能力更强。
    安全强度:等效于 RSA 15360 位。
算法类型 推荐参数 安全强度(等效对称位) 破解所需量子位元 抗量子能力 性能(签名/验签速度)
RSA-1024 -b 1024 80位 (★☆☆☆☆) 2,048比特 ★☆☆☆☆ ★★★★☆
RSA-2048 -b 2048 112位 (★★★☆☆) 4,096比特 ★☆☆☆☆ ★★★☆☆
RSA-4096 -b 4096 192位 (★★★★☆) 8,192比特 ★☆☆☆☆ ★★☆☆☆
ECDSA-256 -b 256 128位 (★★★☆☆) 1,536比特 ★★☆☆☆ ★★★★★
ECDSA-384 -b 384 192位 (★★★★☆) 2,304比特 ★★☆☆☆ ★★★★☆
ECDSA-521 -b 521 256位 (★★★★★) 3,126比特 ★★☆☆☆ ★★★☆☆
Ed25519 (固定256位) 128位 (★★★☆☆) 1,536比特 ★★★☆☆ ★★★★★
Falcon-512 FN-DSA-512 (L1) 128位 (★★★☆☆) ≈3,000比特 ★★★★☆ ★★★★☆
Falcon-1024 FN-DSA-1024 (L5) 256位 (★★★★★) ≈9,000比特 ★★★★☆ ★★★☆☆
  1. RSA,DSA,ECDSA,EdDSA和Ed25519都用于数字签名,但只有RSA也可以用于加密。
    • RSA(Rivest–Shamir–Adleman)是最早的公钥密码系统之一,被广泛用于安全数据传输。它的安全性取决于整数分解,因此永远不需要安全的RNG(随机数生成器)。与DSA相比,RSA的签名验证速度更快,但生成速度较慢。
    • DSA(数字签名算法)是用于数字签名的联邦信息处理标准。它的安全性取决于离散的对数问题。与RSA相比,DSA的签名生成速度更快,但验证速度较慢。如果使用错误的数字生成器,可能会破坏安全性。
    • ECDSA(椭圆曲线数字签名算法)是DSA(数字签名算法)的椭圆曲线实现。椭圆曲线密码术能够以较小的密钥提供与RSA相对相同的安全级别。它还具有DSA对不良RNG敏感的缺点。
    • EdDSA(爱德华兹曲线数字签名算法)是一种使用基于扭曲爱德华兹曲线的Schnorr签名变体的数字签名方案。签名创建在EdDSA中是确定性的,其安全性是基于某些离散对数问题的难处理性,因此它比DSA和ECDSA更安全,后者要求每个签名都具有高质量的随机性。
    • Ed25519是EdDSA签名方案,但使用SHA-512 / 256和Curve25519;它是一条安全的椭圆形曲线,比DSA,ECDSA和EdDSA 提供更好的安全性,并且具有更好的性能(人为注意)。