rikunarita-2 commited on
Commit
14f1fef
·
verified ·
1 Parent(s): 7421995

Create entrypoint.sh

Browse files
Files changed (1) hide show
  1. entrypoint.sh +81 -0
entrypoint.sh ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+ # ---------------------------------------------------------------
3
+ # 起動時に「このコンテナに割り当てられた」CPU 数を正確に検出する。
4
+ #
5
+ # nproc --all はホストの全 CPU 数を返すため NG。
6
+ # nproc (引数なし) は cpuset 制限は尊重するが、
7
+ # HuggingFace のように --cpus=2 (CFS クォータ) で制限している場合は
8
+ # やはりホスト値を返してしまう。
9
+ #
10
+ # 唯一正確な方法は cgroup のクォータファイルを直接読む:
11
+ # cgroup v2: /sys/fs/cgroup/cpu.max → "quota period"
12
+ # cgroup v1: /sys/fs/cgroup/cpu/cpu.cfs_quota_us
13
+ # /sys/fs/cgroup/cpu/cpu.cfs_period_us
14
+ # ---------------------------------------------------------------
15
+
16
+ # cgroup v2 を優先して確認
17
+ if [ -f /sys/fs/cgroup/cpu.max ]; then
18
+ CPU_MAX=$(cat /sys/fs/cgroup/cpu.max)
19
+ QUOTA=$(echo "$CPU_MAX" | awk '{print $1}')
20
+ PERIOD=$(echo "$CPU_MAX" | awk '{print $2}')
21
+ if [ "$QUOTA" = "max" ]; then
22
+ # クォータ無制限 → cpuset ベースの実コア数にフォールバック
23
+ NCPU=$(nproc)
24
+ else
25
+ NCPU=$(( QUOTA / PERIOD ))
26
+ fi
27
+ # cgroup v1 にフォールバック
28
+ elif [ -f /sys/fs/cgroup/cpu/cpu.cfs_quota_us ]; then
29
+ QUOTA=$(cat /sys/fs/cgroup/cpu/cpu.cfs_quota_us)
30
+ PERIOD=$(cat /sys/fs/cgroup/cpu/cpu.cfs_period_us)
31
+ if [ "$QUOTA" -le 0 ]; then
32
+ NCPU=$(nproc)
33
+ else
34
+ NCPU=$(( QUOTA / PERIOD ))
35
+ fi
36
+ else
37
+ # cgroup が読めない環境
38
+ NCPU=$(nproc)
39
+ fi
40
+
41
+ # 最低 1 を保証
42
+ [ "$NCPU" -lt 1 ] && NCPU=1
43
+
44
+ echo "[entrypoint] 割り当て CPU 数: ${NCPU}"
45
+
46
+ # [修正7] jemalloc ランタイム設定を NCPU 確定後に動的セット。
47
+ #
48
+ # narenas:${NCPU}
49
+ # アリーナ数を割り当て vCPU 数 (HF 無料枠 = 2) に合わせる。
50
+ # デフォルト (論理コア数 × 4) のままだと、アリーナが独立して
51
+ # メモリを管理するため断片化が倍増する。
52
+ #
53
+ # background_thread:true
54
+ # バックグラウンドスレッドが非同期でダーティページを回収する。
55
+ # アプリスレッドのレイテンシに影響せず、推論間の RSS スパイクを平滑化。
56
+ #
57
+ # dirty_decay_ms:2000
58
+ # 解放済みダーティページを 2 秒以内に OS へ返却 (デフォルト 10 秒)。
59
+ # 大テンソルの解放後に RAM が素早く空くため次の推論がOOMしにくい。
60
+ #
61
+ # muzzy_decay_ms:0
62
+ # decommit 済みページを即座に返却 (デフォルト 10 秒)。
63
+ # 仮想メモリのフットプリントを最小化し、RSS の上限を下げる。
64
+ export MALLOC_CONF="narenas:${NCPU},background_thread:true,dirty_decay_ms:2000,muzzy_decay_ms:0"
65
+
66
+ # PyTorch / OpenMP intra-op スレッド数
67
+ export OMP_NUM_THREADS=${NCPU}
68
+
69
+ # Intel MKL スレッド数 (PyTorch が MKL-DNN を使う場合)
70
+ export MKL_NUM_THREADS=${NCPU}
71
+
72
+ # OpenBLAS スレッド数 (numpy 等が内部で使用)
73
+ export OPENBLAS_NUM_THREADS=${NCPU}
74
+
75
+ # numexpr スレッド数 (numpy 高度演算の補助ライブラリ)
76
+ export NUMEXPR_NUM_THREADS=${NCPU}
77
+
78
+ # BLIS スレッド数 (PyTorch のビルドによっては使用)
79
+ export BLIS_NUM_THREADS=${NCPU}
80
+
81
+ exec "$@"