Connie-Wild commited on
Commit
cc0bc9b
·
1 Parent(s): c333905

refactoring

Browse files
Files changed (1) hide show
  1. app.py +72 -44
app.py CHANGED
@@ -1,47 +1,70 @@
1
  import gradio as gr
2
  import requests
3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  def get_model_api_info(model_name: str) -> dict:
5
  """
6
- Hugging Face Hub API から指定モデルの情報を取得する
 
 
 
7
  """
8
- api_url = f"https://huggingface.co/api/models/{model_name}"
9
- response = requests.get(api_url)
10
- if response.status_code != 200:
 
 
 
11
  return None
12
- return response.json()
13
 
14
  def sum_precision_sizes(parameters: dict) -> int:
15
  """
16
- parameters 辞書から、キーがあれば対応表に合わせて合算する
 
 
 
17
  """
18
  # 各データ型とその乗数の対応表
19
- multipliers = {
20
- "U8": 1,
21
- "I8": 1,
22
- "F8_E5M2": 1,
23
- "F8_E4M3": 1,
24
- "I16": 2,
25
- "U16": 2,
26
- "F16": 2,
27
- "BF16": 2,
28
- "I32": 4,
29
- "U32": 4,
30
- "F32": 4,
31
- "F64": 8,
32
- "I64": 8,
33
- "U64": 8,
34
- }
35
- return sum(parameters.get(key, 0) * multiplier for key, multiplier in multipliers.items())
36
 
37
  def estimate_gpu_memory(model_name: str) -> str:
38
  """
39
- 指定したモデル名からAPIを呼び出し、safetensors内の各精度のサイズを合算して、
40
- 補正後に必要なGPUメモリ量を GB 単位で概算して返す。
 
 
 
41
  """
 
 
42
  model_info = get_model_api_info(model_name)
43
  if model_info is None:
44
- return f"エラー: モデル '{model_name}' の情報が取得できませんでした。"
 
45
 
46
  # リポジトリ全体のファイルサイズ(参考)
47
  usedStorage = model_info.get("usedStorage")
@@ -51,35 +74,40 @@ def estimate_gpu_memory(model_name: str) -> str:
51
 
52
  # safetensorsの情報が見つからない場合
53
  if not safetensors or "parameters" not in safetensors:
54
- result = "safetensors の情報が見つかりません。\n"
55
  if usedStorage_gb is not None:
56
- result += (f"\n参考: 該当リポジトリのファイルサイズは合計 {usedStorage_gb:.2f} GB \n"
57
- f"仮にこれを全てモデルサイズとして推論時(1.5倍)、トレーニング時(4倍)の補正を適用すると概算GPUメモリ必要量は\n"
58
- f"【推論】約 {usedStorage_gb * 1.5:.2f} GB \n"
59
- f"【トレーニング】約 {usedStorage_gb* 4:.2f} GB \n"
60
- f"となります。")
61
- return result
 
62
 
63
  # safetensorsの情報がある場合
64
  parameters = safetensors["parameters"]
65
  estimated_bytes = sum_precision_sizes(parameters)
66
  estimated_gb = estimated_bytes / (1024 ** 3)
67
 
68
- result = f"モデル '{model_name}' のsafetensors情報より、各パラメータ数は\n"
69
 
70
- keys = ["U8", "I8", "F8_E5M2", "F8_E4M3", "I16", "U16", "F16", "BF16", "I32", "U32", "F32", "F64", "I64", "U64"]
71
- lines = [f"【{key}】{parameters[key]:,}" for key in keys if key in parameters]
72
- result += "\n".join(lines) + "\n"
 
73
 
74
- result += (f"これらを合算するとモデルのパラメータサイズは約 {estimated_gb:.2f} GB です。\n\n"
75
- f"推論時(1.5倍)、トレーニング時(4倍)の補正を適用すると概算GPUメモリ必要量は\n"
76
- f"【推論】約 {estimated_gb * 1.5:.2f} GB \n"
77
- f"【トレーニング】約 {estimated_gb * 4:.2f} GB \n"
78
- f"となります。\n")
 
79
 
80
  if usedStorage_gb is not None:
81
- result += f"参考: 該当リポジトリのファイルサイズは合計 {usedStorage_gb:.2f} GB"
82
- return result
 
 
83
 
84
  # Gradio インターフェースの定義
85
  iface = gr.Interface(
 
1
  import gradio as gr
2
  import requests
3
 
4
+
5
+ # 定数定義
6
+ API_BASE_URL = "https://huggingface.co/api/models/"
7
+ MULTIPLIERS = {
8
+ "U8": 1,
9
+ "I8": 1,
10
+ "F8_E5M2": 1,
11
+ "F8_E4M3": 1,
12
+ "I16": 2,
13
+ "U16": 2,
14
+ "F16": 2,
15
+ "BF16": 2,
16
+ "I32": 4,
17
+ "U32": 4,
18
+ "F32": 4,
19
+ "F64": 8,
20
+ "I64": 8,
21
+ "U64": 8,
22
+ }
23
+ PRECISION_KEYS = list(MULTIPLIERS.keys())
24
+
25
  def get_model_api_info(model_name: str) -> dict:
26
  """
27
+ Hugging Face Hub APIから指定モデルの情報を取得する。
28
+
29
+ :param model_name: モデル名(例: "meta-llama/Llama-3.3-70B-Instruct")
30
+ :return: モデル情報の辞書。取得に失敗した場合はNoneを返す。
31
  """
32
+ api_url = f"{API_BASE_URL}{model_name}"
33
+ try:
34
+ response = requests.get(api_url)
35
+ response.raise_for_status()
36
+ return response.json()
37
+ except requests.RequestException:
38
  return None
 
39
 
40
  def sum_precision_sizes(parameters: dict) -> int:
41
  """
42
+ safetensors内の各精度のパラメータ数に対して、定数の乗数をかけた合計バイト数を算出する。
43
+
44
+ :param parameters: 各精度のパラメータ数を含む辞書
45
+ :return: 合計バイト数
46
  """
47
  # 各データ型とその乗数の対応表
48
+ total_bytes = 0
49
+ for precision, multiplier in MULTIPLIERS.items():
50
+ count = parameters.get(precision, 0)
51
+ total_bytes += count * multiplier
52
+ return total_bytes
 
 
 
 
 
 
 
 
 
 
 
 
53
 
54
  def estimate_gpu_memory(model_name: str) -> str:
55
  """
56
+ 指定したモデル名からAPI情報を取得し、safetensors内の各精度パラメータサイズの合算値から
57
+ GPUメモリ必要量を概算する。
58
+
59
+ :param model_name: モデル名
60
+ :return: GPUメモリ必要量などの情報を含むメッセージ文字列
61
  """
62
+ result_lines = []
63
+
64
  model_info = get_model_api_info(model_name)
65
  if model_info is None:
66
+ result_lines.append(f"エラー: モデル '{model_name}' の情報が取得できませんでした。")
67
+ return "\n".join(result_lines)
68
 
69
  # リポジトリ全体のファイルサイズ(参考)
70
  usedStorage = model_info.get("usedStorage")
 
74
 
75
  # safetensorsの情報が見つからない場合
76
  if not safetensors or "parameters" not in safetensors:
77
+ result_lines.append("safetensorsの情報が見つかりません。")
78
  if usedStorage_gb is not None:
79
+ result_lines.append("")
80
+ result_lines.append(f"参考までに、該当リポジトリのファイルサイズは合計 {usedStorage_gb:.2f} GBです。")
81
+ result_lines.append(f"仮にこれを全てモデルサイズとして推論時(1.5倍)、トレーニング時(4倍)の補正を適用すると概算GPUメモリ必要量は")
82
+ result_lines.append(f"【推論】約 {usedStorage_gb * 1.5:.2f} GB")
83
+ result_lines.append(f"【トレーニング】約 {usedStorage_gb * 4:.2f} GB")
84
+ result_lines.append("となります。")
85
+ return "\n".join(result_lines)
86
 
87
  # safetensorsの情報がある場合
88
  parameters = safetensors["parameters"]
89
  estimated_bytes = sum_precision_sizes(parameters)
90
  estimated_gb = estimated_bytes / (1024 ** 3)
91
 
92
+ result_lines.append(f"モデル '{model_name}' のsafetensors情報より、各パラメータ数は")
93
 
94
+ # 各精度ごとのパラメータ数の出力
95
+ for precision in PRECISION_KEYS:
96
+ if precision in parameters:
97
+ result_lines.append(f"【{precision}】 {parameters[precision]:,}")
98
 
99
+ result_lines.append(f"これらを合算するとモデルのパラメータサイズは約 {estimated_gb:.2f} GB です。")
100
+ result_lines.append("")
101
+ result_lines.append(f"推論時(1.5倍)、トレーニング時(4倍)の補正を適用すると概算GPUメモリ必要量は")
102
+ result_lines.append(f"【推論】約 {estimated_gb * 1.5:.2f} GB")
103
+ result_lines.append(f"【トレーニング】約 {estimated_gb * 4:.2f} GB")
104
+ result_lines.append("となります。")
105
 
106
  if usedStorage_gb is not None:
107
+ result_lines.append("")
108
+ result_lines.append(f"参考: 該当リポジトリのファイルサイズは合計 {usedStorage_gb:.2f} GB")
109
+
110
+ return "\n".join(result_lines)
111
 
112
  # Gradio インターフェースの定義
113
  iface = gr.Interface(