alex4cip Claude commited on
Commit
f1ac66c
ยท
1 Parent(s): 09e4bc2

docs: Update README with multi-environment support and remove redundant footer

Browse files

README.md changes:
- Add comprehensive multi-environment support documentation
- Local environments: GPU (CUDA/MPS), CPU
- HF Spaces: ZeroGPU, CPU Upgrade, CPU Basic
- Add hardware auto-detection explanation with code examples
- Add CUDA compatibility testing for RTX 5080+ support
- Expand performance comparison table (2 โ†’ 5 environments)
- Add known issues and troubleshooting section
- Simplify installation instructions (single requirements.txt)
- Add PyTorch version requirements per environment

app.py changes:
- Move useful content (test examples, loading time note) to header
- Remove redundant footer section (60+ lines)
- Cleaner UI with all important info at the top
- Better user experience with reduced scrolling

Benefits:
- Eliminates duplicate information (header vs footer)
- Improves information accessibility
- Clearer environment setup guidance
- Better troubleshooting documentation

๐Ÿค– Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>

Files changed (2) hide show
  1. README.md +255 -105
  2. app.py +6 -56
README.md CHANGED
@@ -12,15 +12,16 @@ license: mit
12
 
13
  # ๐Ÿค– Multi-Model Korean LLM Chatbot
14
 
15
- 13๊ฐœ์˜ ๋‹ค์–‘ํ•œ ํ•œ๊ตญ์–ด LLM ๋ชจ๋ธ์„ ์„ ํƒํ•˜์—ฌ ๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ€ํ‹ฐ๋ชจ๋ธ ์ฑ—๋ด‡์ž…๋‹ˆ๋‹ค. **ZeroGPU**์™€ **CPU Upgrade** ํ•˜๋“œ์›จ์–ด๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
16
 
17
  ## โœจ ์ฃผ์š” ํŠน์ง•
18
 
19
  - **๐ŸŽฏ 13๊ฐœ ๋ชจ๋ธ ์„ ํƒ**: ๋‹ค์–‘ํ•œ ํฌ๊ธฐ์™€ ํŠน์„ฑ์˜ LLM ๋ชจ๋ธ ์ง€์›
20
  - **๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ธ€ ์ตœ์ ํ™”**: ํ•œ๊ตญ์–ด ์„ฑ๋Šฅ์ด ์šฐ์ˆ˜ํ•œ ๋ชจ๋ธ๋“ค๋กœ ๊ตฌ์„ฑ
21
- - **โšก ์œ ์—ฐํ•œ ํ•˜๋“œ์›จ์–ด**: ZeroGPU/CPU Upgrade ์ž๋™ ๊ฐ์ง€
22
  - **๐Ÿ’พ ์บ์‹œ ์‹œ์Šคํ…œ**: ๋ชจ๋ธ ์žฌ๋‹ค์šด๋กœ๋“œ ๋ฐฉ์ง€, ๋น ๋ฅธ ๋กœ๋”ฉ
23
  - **๐Ÿ”„ Lazy Loading**: ์„ ํƒํ•œ ๋ชจ๋ธ๋งŒ ๋กœ๋“œํ•˜์—ฌ ๋ฆฌ์†Œ์Šค ์ ˆ์•ฝ
 
24
 
25
  ## ๐ŸŽฏ ์ง€์› ๋ชจ๋ธ (13๊ฐœ)
26
 
@@ -53,113 +54,221 @@ license: mit
53
 
54
  > **์ฐธ๊ณ **: Gated ๋ชจ๋ธ์€ Hugging Face์—์„œ ๋ณ„๋„ ์Šน์ธ ํ•„์š”
55
 
56
- ## ๐Ÿš€ ํ•˜๋“œ์›จ์–ด ์˜ต์…˜
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
57
 
58
- ### Option 1: ZeroGPU (์ถ”์ฒœ)
59
-
60
- **์žฅ์ **:
61
- - โšก ๋น ๋ฅธ ์‘๋‹ต (3-10์ดˆ)
62
- - ๐Ÿ’ฐ ์ €๋ ดํ•œ ๋น„์šฉ ($9/month)
63
- - ๐Ÿ”‹ ์ž๋™ GPU ํ• ๋‹น/ํ•ด์ œ
64
-
65
- **์ œ์•ฝ**:
66
- - ํ•˜๋ฃจ 25๋ถ„ ๋ฌด๋ฃŒ ์‚ฌ์šฉ (PRO ๊ตฌ๋… ํ•„์š”)
67
- - ๋Œ€๊ธฐ์—ด ๊ฐ€๋Šฅ (์‚ฌ์šฉ์ž ๋งŽ์„ ๊ฒฝ์šฐ)
68
-
69
- **๋น„์šฉ**: $9/month (PRO ๊ตฌ๋…)
70
-
71
- ### Option 2: CPU Upgrade
72
-
73
- **์žฅ์ **:
74
- - โฐ ๋ฌด์ œํ•œ ์‚ฌ์šฉ
75
- - ๐Ÿ“Š ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์„ฑ๋Šฅ
76
- - ๐Ÿ”ง ๊ฐ„๋‹จํ•œ ์„ค์ •
77
-
78
- **์ œ์•ฝ**:
79
- - ๐Ÿข ๋А๋ฆฐ ์‘๋‹ต (15์ดˆ~2๋ถ„)
80
- - ๐Ÿ’ต ์ƒ๋Œ€์ ์œผ๋กœ ๋น„์‹ผ ๋น„์šฉ
81
 
82
- **๋น„์šฉ**: $0.03/hour (์›” ์•ฝ $22)
 
 
 
 
83
 
84
- ## โš™๏ธ ํ•˜๋“œ์›จ์–ด ์„ค์ • ๋ฐฉ๋ฒ•
85
 
86
- ### ZeroGPU๋กœ ๋ณ€๊ฒฝ
87
 
 
88
  1. Space Settings โ†’ Hardware
89
  2. **ZeroGPU** ์„ ํƒ
90
- 3. Confirm
91
- 4. ๋นŒ๋“œ ์™„๋ฃŒ ๋Œ€๊ธฐ (1-2๋ถ„)
92
-
93
- โ†’ UI์— "ZeroGPU" ํ‘œ์‹œ ํ™•์ธ
94
-
95
- ### CPU Upgrade๋กœ ๋ณ€๊ฒฝ
96
 
 
97
  1. Space Settings โ†’ Hardware
98
  2. **CPU Upgrade (8 vCPU / 32 GB)** ์„ ํƒ
99
- 3. Confirm
100
- 4. ๋นŒ๋“œ ์™„๋ฃŒ ๋Œ€๊ธฐ (1-2๋ถ„)
101
 
102
- โ†’ UI์— "CPU Upgrade" ํ‘œ์‹œ ํ™•์ธ
 
 
103
 
104
  ## ๐Ÿ“Š ์„ฑ๋Šฅ ๋น„๊ต
105
 
106
- | ํ•ญ๋ชฉ | ZeroGPU | CPU Upgrade |
107
- |------|---------|-------------|
108
- | **์ฒซ ์‘๋‹ต** | 10-20์ดˆ | 1-3๋ถ„ |
109
- | **์ดํ›„ ์‘๋‹ต** | 3-10์ดˆ | 15์ดˆ~2๋ถ„ |
110
- | **์ผ์ผ ํ•œ๋„** | 25๋ถ„ | ๋ฌด์ œํ•œ |
111
- | **์›” ๋น„์šฉ** | $9 | $22 |
112
- | **GPU** | H200 (70GB) | ์—†์Œ |
113
- | **RAM** | - | 32GB |
114
 
115
  ## ๐Ÿ”ง ๊ธฐ์ˆ  ๊ตฌ์กฐ
116
 
117
- ### ์ž๋™ ํ•˜๋“œ์›จ์–ด ๊ฐ์ง€
118
 
119
  ```python
120
- # ZeroGPU ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ์ž๋™ ๊ฐ์ง€
121
  try:
122
  import spaces
123
  ZEROGPU_AVAILABLE = True
124
  except ImportError:
125
  ZEROGPU_AVAILABLE = False
126
 
127
- # ์กฐ๊ฑด๋ถ€ decorator ์ ์šฉ
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
128
  if ZEROGPU_AVAILABLE:
129
  @spaces.GPU(duration=120)
130
- def generate_response(messages):
131
- return generate_response_impl(messages)
132
  else:
133
- def generate_response(messages):
134
- return generate_response_impl(messages)
135
  ```
136
 
137
- ### Lazy Loading ์‹œ์Šคํ…œ
138
-
139
- - ์„ ํƒํ•œ ๋ชจ๋ธ๋งŒ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ
140
- - ๋ชจ๋ธ ์ „ํ™˜ ์‹œ ์ด์ „ ๋ชจ๋ธ ์ž๋™ ์–ธ๋กœ๋“œ
141
- - ์บ์‹œ ํ™•์ธ์œผ๋กœ ์žฌ๋‹ค์šด๋กœ๋“œ ๋ฐฉ์ง€
142
- - ๋””์Šคํฌ์—์„œ ๋น ๋ฅธ ๋กœ๋”ฉ (์บ์‹œ๋œ ๊ฒฝ์šฐ)
143
-
144
- ### ์บ์‹œ ๊ด€๋ฆฌ
145
 
 
146
  ```python
147
- def check_model_cached(model_name):
148
- """Check if model is already downloaded in HF cache"""
149
- from huggingface_hub import scan_cache_dir
150
- cache_info = scan_cache_dir()
151
-
152
- for repo in cache_info.repos:
153
- if repo.repo_id == model_name:
154
- return True
155
- return False
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
156
  ```
157
 
 
 
 
 
158
  ## ๐Ÿ“ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•
159
 
160
  ### 1. Space ์ ‘์†
161
 
162
- https://huggingface.co/spaces/catchitplay/simple-chatbot-gradio
163
 
164
  ### 2. ๋ชจ๋ธ ์„ ํƒ
165
 
@@ -207,25 +316,14 @@ cd simple-chatbot-gradio
207
  python -m venv venv
208
  source venv/bin/activate # Windows: venv\Scripts\activate
209
 
210
- # ์˜์กด์„ฑ ์„ค์น˜ (3๊ฐ€์ง€ ๋ฐฉ๋ฒ•)
211
- ```
212
-
213
- **๋ฐฉ๋ฒ• 1: ๋กœ์ปฌ ์ „์šฉ requirements (๊ถŒ์žฅ)**
214
- ```bash
215
- pip install -r requirements-local.txt
216
- # ์ตœ์‹  PyTorch ๋ฒ„์ „ ์‚ฌ์šฉ (ZeroGPU ์ œ์•ฝ ์—†์Œ)
217
- ```
218
-
219
- **๋ฐฉ๋ฒ• 2: ์ž๋™ ํ™˜๊ฒฝ ๊ฐ์ง€ ์„ค์น˜**
220
- ```bash
221
- python setup.py
222
- # ํ™˜๊ฒฝ์„ ์ž๋™ ๊ฐ์ง€ํ•˜๊ณ  ์ ์ ˆํ•œ ๋ฒ„์ „ ์„ค์น˜
223
  ```
224
 
225
- **๋ฐฉ๋ฒ• 3: HF Spaces์šฉ requirements**
226
  ```bash
227
- pip install -r requirements.txt
228
- # PyTorch 2.2.0 (ZeroGPU ํ˜ธํ™˜)
229
  ```
230
 
231
  ### .env ํŒŒ์ผ ์„ค์ •
@@ -247,12 +345,28 @@ echo "HF_TOKEN=your_hugging_face_token" > .env
247
  python app.py
248
  ```
249
 
250
- ๋ธŒ๋ผ์šฐ์ €์—์„œ http://0.0.0.0:7860 ์ ‘์† (๋˜๋Š” http://localhost:7860)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
251
 
252
  **์ฐธ๊ณ **:
253
- - ๋กœ์ปฌ์€ CPU/GPU ์ž๋™ ๊ฐ์ง€
254
- - GPU ๊ถŒ์žฅ (CUDA ํ•„์š”)
255
- - ์ฒซ ์‹คํ–‰ ์‹œ ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ (์‹œ๊ฐ„ ์†Œ์š”)
 
256
 
257
  ### ๋ฆฌ๋ˆ…์Šค ์‹œ์Šคํ…œ ์„œ๋น„์Šค๋กœ ์„ค์น˜ (์ž๋™ ์‹œ์ž‘)
258
 
@@ -403,25 +517,35 @@ pip install -r requirements-local.txt
403
  ## ๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ
404
 
405
  - **ํ”„๋ ˆ์ž„์›Œํฌ**: Gradio 5.49.1
406
- - **ML ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ**: Transformers 4.57.1, PyTorch 2.2.0 (ZeroGPU ํ˜ธํ™˜)
407
- - **GPU ์ธํ”„๋ผ**: Hugging Face ZeroGPU (์„ ํƒ์ )
 
 
 
408
  - **์–ธ์–ด**: Python 3.10+
409
 
410
  ## ๐Ÿ“š Dependencies
411
 
412
  ```txt
 
413
  gradio==5.49.1
414
  transformers==4.57.1
415
- torch==2.2.0 # ZeroGPU compatible (supports 2.0.0-2.2.0)
416
  safetensors==0.6.2
417
  accelerate==0.26.1
418
  sentencepiece==0.2.0
419
  protobuf==4.25.1
420
  huggingface-hub>=0.19.0
421
  python-dotenv==1.0.0
422
- spaces # ZeroGPU support
423
  ```
424
 
 
 
 
 
 
 
425
  ## ๐Ÿ”’ Gated ๋ชจ๋ธ ์‚ฌ์šฉ๋ฒ•
426
 
427
  ### 1. ๋ชจ๋ธ ์Šน์ธ ์š”์ฒญ
@@ -441,22 +565,48 @@ Space Settings โ†’ Repository secrets:
441
  - Name: `HF_TOKEN`
442
  - Value: `your_token_here`
443
 
444
- ## โš ๏ธ ์ œํ•œ์‚ฌํ•ญ
445
 
446
  ### ๊ณตํ†ต
447
  - **๋ชจ๋ธ ํฌ๊ธฐ**: 2-70GB (๋กœ๋”ฉ ์‹œ๊ฐ„ ํ•„์š”)
448
- - **์ปจํ…์ŠคํŠธ**: ๋Œ€ํ™” ํžˆ์Šคํ† ๋ฆฌ ์œ ์ง€
449
  - **๋ฉ”๋ชจ๋ฆฌ**: ํฐ ๋ชจ๋ธ์€ GPU/๊ณ ์šฉ๋Ÿ‰ RAM ํ•„์š”
450
 
451
- ### ZeroGPU ์ „์šฉ
452
- - **์ผ์ผ ํ•œ๋„**: 25๋ถ„ (PRO ๊ตฌ๋…)
453
- - **๋Œ€๊ธฐ์—ด**: ์‚ฌ์šฉ์ž ๋งŽ์„ ๊ฒฝ์šฐ ๋Œ€๊ธฐ
454
- - **PRO ํ•„์š”**: $9/month ๊ตฌ๋… ํ•„์š”
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
455
 
456
- ### CPU Upgrade ์ „์šฉ
457
- - **๋А๋ฆฐ ์†๋„**: GPU ๋Œ€๋น„ 10-30๋ฐฐ ๋А๋ฆผ
458
- - **๋น„์šฉ**: ์‹œ๊ฐ„๋‹น $0.03 ($22/month)
459
- - **๋ฉ”๋ชจ๋ฆฌ ์ œ์•ฝ**: 32GB RAM (๋Œ€ํ˜• ๋ชจ๋ธ ์ œ์•ฝ)
460
 
461
  ## ๐Ÿ”— ๊ด€๋ จ ๋ฆฌ์†Œ์Šค
462
 
 
12
 
13
  # ๐Ÿค– Multi-Model Korean LLM Chatbot
14
 
15
+ 13๊ฐœ์˜ ๋‹ค์–‘ํ•œ ํ•œ๊ตญ์–ด LLM ๋ชจ๋ธ์„ ์„ ํƒํ•˜์—ฌ ๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ€ํ‹ฐ๋ชจ๋ธ ์ฑ—๋ด‡์ž…๋‹ˆ๋‹ค. **๋กœ์ปฌ ํ™˜๊ฒฝ(CPU/GPU)**๊ณผ **Hugging Face Spaces(CPU Basic/Upgrade, ZeroGPU)**๋ฅผ ์ž๋™ ๊ฐ์ง€ํ•˜์—ฌ ์ตœ์  ์„ค์ •์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
16
 
17
  ## โœจ ์ฃผ์š” ํŠน์ง•
18
 
19
  - **๐ŸŽฏ 13๊ฐœ ๋ชจ๋ธ ์„ ํƒ**: ๋‹ค์–‘ํ•œ ํฌ๊ธฐ์™€ ํŠน์„ฑ์˜ LLM ๋ชจ๋ธ ์ง€์›
20
  - **๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ธ€ ์ตœ์ ํ™”**: ํ•œ๊ตญ์–ด ์„ฑ๋Šฅ์ด ์šฐ์ˆ˜ํ•œ ๋ชจ๋ธ๋“ค๋กœ ๊ตฌ์„ฑ
21
+ - **๐Ÿ–ฅ๏ธ ๋ฉ€ํ‹ฐ ํ™˜๊ฒฝ ์ง€์›**: ๋กœ์ปฌ(CPU/GPU) + HF Spaces(CPU Basic/Upgrade, ZeroGPU) ์ž๋™ ๊ฐ์ง€
22
  - **๐Ÿ’พ ์บ์‹œ ์‹œ์Šคํ…œ**: ๋ชจ๋ธ ์žฌ๋‹ค์šด๋กœ๋“œ ๋ฐฉ์ง€, ๋น ๋ฅธ ๋กœ๋”ฉ
23
  - **๐Ÿ”„ Lazy Loading**: ์„ ํƒํ•œ ๋ชจ๋ธ๋งŒ ๋กœ๋“œํ•˜์—ฌ ๋ฆฌ์†Œ์Šค ์ ˆ์•ฝ
24
+ - **๐Ÿ›ก๏ธ ์•ˆ์ •์„ฑ**: RTX 5080 ๋“ฑ ์ตœ์‹  GPU ์ง€์›, CUDA ํ˜ธํ™˜์„ฑ ์ž๋™ ํ…Œ์ŠคํŠธ
25
 
26
  ## ๐ŸŽฏ ์ง€์› ๋ชจ๋ธ (13๊ฐœ)
27
 
 
54
 
55
  > **์ฐธ๊ณ **: Gated ๋ชจ๋ธ์€ Hugging Face์—์„œ ๋ณ„๋„ ์Šน์ธ ํ•„์š”
56
 
57
+ ## ๐Ÿš€ ์ง€์› ํ™˜๊ฒฝ
58
+
59
+ ### ๋กœ์ปฌ ํ™˜๊ฒฝ (๊ฐœ๋ฐœ/๊ฐœ์ธ ์‚ฌ์šฉ)
60
+
61
+ **1. Local GPU (๊ถŒ์žฅ)**
62
+ - **์žฅ์ **:
63
+ - โšก ๋น ๋ฅธ ์‘๋‹ต (5-10์ดˆ, GPU ๊ฐ€์†)
64
+ - ๐Ÿ”“ ๋ฌด์ œํ•œ ์‚ฌ์šฉ
65
+ - ๐Ÿ’ฐ ๋น„์šฉ ์—†์Œ
66
+ - **์ง€์› GPU**:
67
+ - NVIDIA CUDA ์ง€์› GPU (RTX ์‹œ๋ฆฌ์ฆˆ, A100 ๋“ฑ)
68
+ - Apple Silicon GPU (M1/M2/M3 - MPS ๊ฐ€์†)
69
+ - RTX 5080 ๋“ฑ ์ตœ์‹  Blackwell GPU (PyTorch nightly ํ•„์š”)
70
+ - **์š”๊ตฌ์‚ฌํ•ญ**: CUDA 12.0+ ๋˜๋Š” Apple Silicon
71
+
72
+ **2. Local CPU**
73
+ - **์žฅ์ **:
74
+ - ๐Ÿ–ฅ๏ธ GPU ์—†์ด๋„ ์‹คํ–‰ ๊ฐ€๋Šฅ
75
+ - ๐Ÿ”ง ๊ฐ„๋‹จํ•œ ์„ค์ •
76
+ - **์ œ์•ฝ**:
77
+ - โณ ๋А๋ฆฐ ์‘๋‹ต (1~3๋ถ„)
78
+ - ๐Ÿ”’ ๊ฒฝ๋Ÿ‰ ๋ชจ๋ธ ๊ถŒ์žฅ (EXAONE 2.4B, Mistral 7B)
79
+
80
+ ### Hugging Face Spaces (ํด๋ผ์šฐ๋“œ ๋ฐฐํฌ)
81
+
82
+ **1. ZeroGPU (์ถ”์ฒœ)**
83
+ - **์žฅ์ **:
84
+ - โšก ๋น ๋ฅธ ์‘๋‹ต (3-10์ดˆ, NVIDIA H200 GPU ๊ฐ€์†)
85
+ - ๐Ÿ’ฐ ์ €๋ ดํ•œ ๋น„์šฉ ($9/month)
86
+ - ๐Ÿ”‹ ์ž๋™ GPU ํ• ๋‹น/ํ•ด์ œ
87
+ - **์ œ์•ฝ**:
88
+ - ํ•˜๋ฃจ 25๋ถ„ ๋ฌด๋ฃŒ ์‚ฌ์šฉ (PRO ๊ตฌ๋… ํ•„์š”)
89
+ - ๋Œ€๊ธฐ์—ด ๊ฐ€๋Šฅ (์‚ฌ์šฉ์ž ๋งŽ์„ ๊ฒฝ์šฐ)
90
+ - **๋น„์šฉ**: $9/month (PRO ๊ตฌ๋…)
91
+
92
+ **2. CPU Upgrade**
93
+ - **์žฅ์ **:
94
+ - โฐ ๋ฌด์ œํ•œ ์‚ฌ์šฉ
95
+ - ๐Ÿ“Š ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์„ฑ๋Šฅ
96
+ - ๐Ÿ”ง ๊ฐ„๋‹จํ•œ ์„ค์ •
97
+ - **์ œ์•ฝ**:
98
+ - ๐Ÿข ๋А๋ฆฐ ์‘๋‹ต (30์ดˆ~1๋ถ„)
99
+ - ๐Ÿ’ต ์ƒ๋Œ€์ ์œผ๋กœ ๋น„์‹ผ ๋น„์šฉ
100
+ - **๋น„์šฉ**: $0.03/hour (์›” ์•ฝ $22)
101
+
102
+ **3. CPU Basic (๋ฌด๋ฃŒ)**
103
+ - **์žฅ์ **:
104
+ - ๐Ÿ’ก ๋ฌด๋ฃŒ ํ‹ฐ์–ด
105
+ - ๐Ÿงช ํ…Œ์ŠคํŠธ/ํ•™์Šต ์šฉ๋„
106
+ - **์ œ์•ฝ**:
107
+ - โณ ๋งค์šฐ ๋А๋ฆฐ ์‘๋‹ต (1~2๋ถ„)
108
+ - ๐Ÿ”’ ๊ฒฝ๋Ÿ‰ ๋ชจ๋ธ๋งŒ ๊ถŒ์žฅ
109
+ - โš ๏ธ ์ œํ•œ์  ์‚ฌ์šฉ
110
+
111
+ ## โš™๏ธ ํ™˜๊ฒฝ๋ณ„ ์„ค์ • ๋ฐฉ๋ฒ•
112
+
113
+ ### ๋กœ์ปฌ ์‹คํ–‰ (์ž๋™ ๊ฐ์ง€)
114
+
115
+ ์•ฑ์ด ์ž๋™์œผ๋กœ ๋กœ์ปฌ ํ™˜๊ฒฝ์„ ๊ฐ์ง€ํ•˜๊ณ  ์ตœ์  ์„ค์ •์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค:
116
 
117
+ ```bash
118
+ python app.py
119
+ ```
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
120
 
121
+ **์ž๋™ ๊ฐ์ง€ ๋กœ์ง**:
122
+ 1. **GPU ๊ฐ์ง€**: CUDA/MPS ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ํ™•์ธ
123
+ 2. **CUDA ํ˜ธํ™˜์„ฑ ํ…Œ์ŠคํŠธ**: ํ…์„œ ์—ฐ์‚ฐ์œผ๋กœ ์‹ค์ œ GPU ์ž‘๋™ ๊ฒ€์ฆ
124
+ 3. **CPU ํด๋ฐฑ**: GPU ์˜ค๋ฅ˜ ์‹œ ์ž๋™ CPU ๋ชจ๋“œ ์ „ํ™˜
125
+ 4. **ํ™˜๊ฒฝ ์ •๋ณด ์ถœ๋ ฅ**: ์‹œ์ž‘ ์‹œ ๊ฐ์ง€๋œ ํ™˜๊ฒฝ ์ •๋ณด ํ‘œ์‹œ
126
 
127
+ ### HF Spaces ๋ฐฐํฌ (์ž๋™ ๊ฐ์ง€)
128
 
129
+ Space Settings์—์„œ ํ•˜๋“œ์›จ์–ด๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์•ฑ์ด ์ž๋™์œผ๋กœ ๊ฐ์ง€:
130
 
131
+ **ZeroGPU๋กœ ๋ณ€๊ฒฝ**:
132
  1. Space Settings โ†’ Hardware
133
  2. **ZeroGPU** ์„ ํƒ
134
+ 3. Confirm โ†’ ๋นŒ๋“œ ์™„๋ฃŒ ๋Œ€๊ธฐ (1-2๋ถ„)
135
+ 4. UI์— "๐Ÿš€ HF Spaces - ZeroGPU" ํ‘œ์‹œ ํ™•์ธ
 
 
 
 
136
 
137
+ **CPU Upgrade๋กœ ๋ณ€๊ฒฝ**:
138
  1. Space Settings โ†’ Hardware
139
  2. **CPU Upgrade (8 vCPU / 32 GB)** ์„ ํƒ
140
+ 3. Confirm โ†’ ๋นŒ๋“œ ์™„๋ฃŒ ๋Œ€๊ธฐ (1-2๋ถ„)
141
+ 4. UI์— "โš™๏ธ HF Spaces - CPU Upgrade" ํ‘œ์‹œ ํ™•์ธ
142
 
143
+ **CPU Basic (๋ฌด๋ฃŒ)**:
144
+ - ๊ธฐ๋ณธ ์„ค์ •, ๋ณ„๋„ ๋ณ€๊ฒฝ ๋ถˆํ•„์š”
145
+ - UI์— "๐Ÿ’ป HF Spaces - CPU Basic" ํ‘œ์‹œ
146
 
147
  ## ๐Ÿ“Š ์„ฑ๋Šฅ ๋น„๊ต
148
 
149
+ | ํ•ญ๋ชฉ | Local GPU | Local CPU | ZeroGPU | CPU Upgrade | CPU Basic |
150
+ |------|-----------|-----------|---------|-------------|-----------|
151
+ | **์ฒซ ์‘๋‹ต** | 10-20์ดˆ | 2-5๋ถ„ | 10-20์ดˆ | 1-2๋ถ„ | 2-3๋ถ„ |
152
+ | **์ดํ›„ ์‘๋‹ต** | 5-10์ดˆ | 1-3๋ถ„ | 3-10์ดˆ | 30์ดˆ~1๋ถ„ | 1-2๋ถ„ |
153
+ | **์ผ์ผ ํ•œ๋„** | ๋ฌด์ œํ•œ | ๋ฌด์ œํ•œ | 25๋ถ„ | ๋ฌด์ œํ•œ | ์ œํ•œ์  |
154
+ | **์›” ๋น„์šฉ** | $0 | $0 | $9 | $22 | $0 |
155
+ | **GPU** | ์‚ฌ์šฉ์ž GPU | ์—†์Œ | H200 (70GB) | ์—†์Œ | ์—†์Œ |
156
+ | **๊ถŒ์žฅ ๋ชจ๋ธ** | ์ „์ฒด | ๊ฒฝ๋Ÿ‰ | ์ „์ฒด | ์ „์ฒด | ๊ฒฝ๋Ÿ‰ |
157
 
158
  ## ๐Ÿ”ง ๊ธฐ์ˆ  ๊ตฌ์กฐ
159
 
160
+ ### ๋ฉ€ํ‹ฐ ํ™˜๊ฒฝ ์ž๋™ ๊ฐ์ง€ ์‹œ์Šคํ…œ
161
 
162
  ```python
163
+ # 1. CUDA ์ดˆ๊ธฐํ™” ์˜ค๋ฅ˜ ๋ฐฉ์ง€: spaces๋ฅผ ๋จผ์ € import
164
  try:
165
  import spaces
166
  ZEROGPU_AVAILABLE = True
167
  except ImportError:
168
  ZEROGPU_AVAILABLE = False
169
 
170
+ # 2. ์ดํ›„ CUDA ๊ด€๋ จ ํŒจํ‚ค์ง€ import
171
+ import torch
172
+ from transformers import AutoModelForCausalLM, AutoTokenizer
173
+
174
+ # 3. ํ•˜๋“œ์›จ์–ด ํ™˜๊ฒฝ ๊ฐ์ง€
175
+ def detect_hardware_environment():
176
+ """
177
+ Returns: {
178
+ 'platform': 'hf_spaces' | 'local',
179
+ 'hardware': 'zerogpu' | 'cpu_upgrade' | 'cpu_basic' | 'local_gpu' | 'local_cpu',
180
+ 'gpu_available': bool,
181
+ 'gpu_name': str or None,
182
+ 'cuda_compatible': bool
183
+ }
184
+ """
185
+ # HF Spaces ๊ฐ์ง€
186
+ if os.environ.get('SPACE_ID'):
187
+ if ZEROGPU_AVAILABLE:
188
+ return 'zerogpu'
189
+ elif cpu_count >= 8:
190
+ return 'cpu_upgrade'
191
+ else:
192
+ return 'cpu_basic'
193
+
194
+ # ๋กœ์ปฌ ํ™˜๊ฒฝ ๊ฐ์ง€
195
+ if torch.cuda.is_available():
196
+ # CUDA ํ˜ธํ™˜์„ฑ ํ…Œ์ŠคํŠธ (RTX 5080 ๋“ฑ ์ตœ์‹  GPU ์ง€์›)
197
+ if test_cuda_compatibility():
198
+ return 'local_gpu'
199
+ else:
200
+ return 'local_cpu' # CUDA ์˜ค๋ฅ˜ โ†’ CPU ํด๋ฐฑ
201
+ elif torch.backends.mps.is_available():
202
+ return 'local_gpu' # Apple Silicon
203
+ else:
204
+ return 'local_cpu'
205
+
206
+ # 4. ์กฐ๊ฑด๋ถ€ GPU decorator ์ ์šฉ
207
  if ZEROGPU_AVAILABLE:
208
  @spaces.GPU(duration=120)
209
+ def generate_response(message, history):
210
+ return generate_response_impl(message, history)
211
  else:
212
+ def generate_response(message, history):
213
+ return generate_response_impl(message, history)
214
  ```
215
 
216
+ ### Lazy Loading & ์บ์‹œ ์‹œ์Šคํ…œ
 
 
 
 
 
 
 
217
 
218
+ **์Šค๋งˆํŠธ ๋ชจ๋ธ ๋กœ๋”ฉ**:
219
  ```python
220
+ def load_model_once(model_index=None):
221
+ """๋ชจ๋ธ ๋ณ€๊ฒฝ ์‹œ์—๋งŒ ๋กœ๋“œ (Lazy Loading)"""
222
+ global model, tokenizer, loaded_model_name
223
+
224
+ model_name = MODEL_CONFIGS[model_index]["MODEL_NAME"]
225
+
226
+ # 1. ์ด๋ฏธ ๋กœ๋“œ๋œ ๋ชจ๋ธ์ด๋ฉด ์žฌ์‚ฌ์šฉ
227
+ if loaded_model_name == model_name:
228
+ print(f"โ„น๏ธ Model {model_name} already loaded, reusing...")
229
+ return model, tokenizer
230
+
231
+ # 2. ์บ์‹œ ํ™•์ธ โ†’ UI์— ๋‹ค์šด๋กœ๋“œ vs ๋กœ๋”ฉ ๋ฉ”์‹œ์ง€ ํ‘œ์‹œ
232
+ is_cached = check_model_cached(model_name)
233
+ if is_cached:
234
+ print(f"โœ… Model found in cache, loading from disk...")
235
+ else:
236
+ print(f"๐Ÿ“ฅ Model not in cache, downloading (~4-14GB)...")
237
+
238
+ # 3. ์ด์ „ ๋ชจ๋ธ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ
239
+ if model is not None:
240
+ del model, tokenizer
241
+ if HW_ENV['cuda_compatible']:
242
+ torch.cuda.empty_cache()
243
+
244
+ # 4. ์ƒˆ ๋ชจ๋ธ ๋กœ๋“œ (ํ™˜๊ฒฝ๋ณ„ ์ตœ์ ํ™”)
245
+ device = "cuda" if HW_ENV['gpu_available'] and HW_ENV['cuda_compatible'] else "cpu"
246
+
247
+ if device == "cuda":
248
+ model = AutoModelForCausalLM.from_pretrained(
249
+ model_name,
250
+ dtype=torch.float16, # GPU: float16
251
+ device_map="auto",
252
+ )
253
+ else:
254
+ model = AutoModelForCausalLM.from_pretrained(
255
+ model_name,
256
+ dtype=torch.float32, # CPU: float32
257
+ )
258
+
259
+ loaded_model_name = model_name
260
+ return model, tokenizer
261
  ```
262
 
263
+ **์บ์‹œ ์ƒํƒœ ํ™•์ธ**:
264
+ - ์‚ฌ์šฉ์ž์—๊ฒŒ "๐Ÿ’พ ์บ์‹œ๋œ ๋ชจ๋ธ ๋กœ๋”ฉ ์ค‘" vs "๐Ÿ“ฅ ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ ์ค‘" ์‹ค์‹œ๊ฐ„ ํ‘œ์‹œ
265
+ - ๋‹ค์šด๋กœ๋“œ ์‹œ๊ฐ„ ์˜ˆ์ธก ์ •๋ณด ์ œ๊ณต (์ฒซ ์‚ฌ์šฉ ์‹œ 5-20๋ถ„)
266
+
267
  ## ๐Ÿ“ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•
268
 
269
  ### 1. Space ์ ‘์†
270
 
271
+ https://huggingface.co/spaces/catchitplay/simple-chat
272
 
273
  ### 2. ๋ชจ๋ธ ์„ ํƒ
274
 
 
316
  python -m venv venv
317
  source venv/bin/activate # Windows: venv\Scripts\activate
318
 
319
+ # ์˜์กด์„ฑ ์„ค์น˜
320
+ pip install -r requirements.txt
 
 
 
 
 
 
 
 
 
 
 
321
  ```
322
 
323
+ **RTX 5080 ๋“ฑ ์ตœ์‹  GPU ์‚ฌ์šฉ ์‹œ**:
324
  ```bash
325
+ # PyTorch nightly ์„ค์น˜ (CUDA 12.8+ ์ง€์›)
326
+ pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu128
327
  ```
328
 
329
  ### .env ํŒŒ์ผ ์„ค์ •
 
345
  python app.py
346
  ```
347
 
348
+ ๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:7860 ์ ‘์†
349
+
350
+ **์‹œ์ž‘ ์‹œ ์ž๋™ ํ™˜๊ฒฝ ๊ฐ์ง€ ์ถœ๋ ฅ**:
351
+ ```
352
+ ============================================================
353
+ Hardware Environment Detection
354
+ ============================================================
355
+ Platform: local
356
+ Hardware: local_gpu
357
+ GPU Available: True
358
+ GPU Name: NVIDIA GeForce RTX 5080
359
+ CPU Cores: 16
360
+ OS: Linux
361
+ Description: ๐Ÿ–ฅ๏ธ Local - GPU (NVIDIA GeForce RTX 5080)
362
+ ============================================================
363
+ ```
364
 
365
  **์ฐธ๊ณ **:
366
+ - ๋กœ์ปฌ ํ™˜๊ฒฝ ์ž๋™ ๊ฐ์ง€: CPU/GPU/Apple Silicon MPS
367
+ - CUDA ํ˜ธํ™˜์„ฑ ์ž๋™ ํ…Œ์ŠคํŠธ (GPU ์˜ค๋ฅ˜ ์‹œ CPU ํด๋ฐฑ)
368
+ - ์ฒซ ์‹คํ–‰ ์‹œ ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ (4-14GB, 5-20๋ถ„ ์†Œ์š”)
369
+ - GPU ๊ถŒ์žฅ (RTX ์‹œ๋ฆฌ์ฆˆ, A100, Apple Silicon ๋“ฑ)
370
 
371
  ### ๋ฆฌ๋ˆ…์Šค ์‹œ์Šคํ…œ ์„œ๋น„์Šค๋กœ ์„ค์น˜ (์ž๋™ ์‹œ์ž‘)
372
 
 
517
  ## ๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ
518
 
519
  - **ํ”„๋ ˆ์ž„์›Œํฌ**: Gradio 5.49.1
520
+ - **ML ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ**: Transformers 4.57.1, PyTorch 2.2.0+
521
+ - **GPU ์ง€์›**:
522
+ - HF Spaces: ZeroGPU (NVIDIA H200)
523
+ - ๋กœ์ปฌ: CUDA 12.0+, Apple Silicon MPS
524
+ - ์ตœ์‹  GPU: PyTorch nightly (CUDA 12.8+) ์ง€์›
525
  - **์–ธ์–ด**: Python 3.10+
526
 
527
  ## ๐Ÿ“š Dependencies
528
 
529
  ```txt
530
+ # Core
531
  gradio==5.49.1
532
  transformers==4.57.1
533
+ torch>=2.2.0 # HF Spaces: 2.2.0 (ZeroGPU), Local: 2.2.0+ or nightly
534
  safetensors==0.6.2
535
  accelerate==0.26.1
536
  sentencepiece==0.2.0
537
  protobuf==4.25.1
538
  huggingface-hub>=0.19.0
539
  python-dotenv==1.0.0
540
+ spaces # ZeroGPU support (HF Spaces only)
541
  ```
542
 
543
+ **ํ™˜๊ฒฝ๋ณ„ PyTorch ๋ฒ„์ „**:
544
+ - **HF Spaces**: PyTorch 2.2.0 (ZeroGPU ํ˜ธํ™˜)
545
+ - **๋กœ์ปฌ ์ผ๋ฐ˜ GPU**: PyTorch 2.2.0+ (CUDA 12.0+)
546
+ - **๋กœ์ปฌ ์ตœ์‹  GPU (RTX 5080 ๋“ฑ)**: PyTorch nightly (CUDA 12.8+)
547
+ - **๋กœ์ปฌ CPU**: PyTorch 2.2.0+ (CPU-only build)
548
+
549
  ## ๐Ÿ”’ Gated ๋ชจ๋ธ ์‚ฌ์šฉ๋ฒ•
550
 
551
  ### 1. ๋ชจ๋ธ ์Šน์ธ ์š”์ฒญ
 
565
  - Name: `HF_TOKEN`
566
  - Value: `your_token_here`
567
 
568
+ ## โš ๏ธ ์ œํ•œ์‚ฌํ•ญ ๋ฐ ์•Œ๋ ค์ง„ ์ด์Šˆ
569
 
570
  ### ๊ณตํ†ต
571
  - **๋ชจ๋ธ ํฌ๊ธฐ**: 2-70GB (๋กœ๋”ฉ ์‹œ๊ฐ„ ํ•„์š”)
572
+ - **์ปจํ…์ŠคํŠธ**: ๋Œ€ํ™” ํžˆ์Šคํ† ๋ฆฌ ์œ ์ง€ (์ตœ๊ทผ 3ํ„ด)
573
  - **๋ฉ”๋ชจ๋ฆฌ**: ํฐ ๋ชจ๋ธ์€ GPU/๊ณ ์šฉ๋Ÿ‰ RAM ํ•„์š”
574
 
575
+ ### ํ™˜๊ฒฝ๋ณ„ ์ œ์•ฝ
576
+
577
+ **HF Spaces - ZeroGPU**:
578
+ - ์ผ์ผ ํ•œ๋„: 25๋ถ„ (PRO ๊ตฌ๋… ํ•„์š”)
579
+ - ๋Œ€๊ธฐ์—ด: ์‚ฌ์šฉ์ž ๋งŽ์„ ๊ฒฝ์šฐ ๋Œ€๊ธฐ
580
+ - ๋น„์šฉ: $9/month
581
+
582
+ **HF Spaces - CPU Upgrade**:
583
+ - ๋А๋ฆฐ ์†๋„: GPU ๋Œ€๋น„ 10-30๋ฐฐ ๋А๋ฆผ
584
+ - ๋น„์šฉ: ์‹œ๊ฐ„๋‹น $0.03 ($22/month)
585
+ - ๋ฉ”๋ชจ๋ฆฌ: 32GB RAM (๋Œ€ํ˜• ๋ชจ๋ธ ์ œ์•ฝ)
586
+
587
+ **HF Spaces - CPU Basic**:
588
+ - ๋งค์šฐ ๋А๋ฆผ: 1-2๋ถ„ ์‘๋‹ต
589
+ - ์ œํ•œ์  ์‚ฌ์šฉ
590
+ - ๊ฒฝ๋Ÿ‰ ๋ชจ๋ธ ๊ถŒ์žฅ
591
+
592
+ **๋กœ์ปฌ ํ™˜๊ฒฝ**:
593
+ - GPU ๋ฉ”๋ชจ๋ฆฌ: ํฐ ๋ชจ๋ธ์€ VRAM ๋ถ€์กฑ ๊ฐ€๋Šฅ
594
+ - ์ตœ์‹  GPU: PyTorch nightly ํ•„์š” (RTX 5080 ๋“ฑ)
595
+ - CPU ๋ชจ๋“œ: ๋งค์šฐ ๋А๋ฆผ (1-3๋ถ„ ์‘๋‹ต)
596
+
597
+ ### ์•Œ๋ ค์ง„ ์ด์Šˆ ๋ฐ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•
598
+
599
+ **"CUDA has been initialized" ์˜ค๋ฅ˜ (ZeroGPU)**:
600
+ - **์›์ธ**: torch ์ „์— spaces import ํ•„์š”
601
+ - **ํ•ด๊ฒฐ**: app.py์—์„œ spaces๋ฅผ ๊ฐ€์žฅ ๋จผ์ € import (์ด๋ฏธ ์ ์šฉ๋จ)
602
+
603
+ **RTX 5080 ๋“ฑ Blackwell GPU์—์„œ CUDA ์˜ค๋ฅ˜**:
604
+ - **์›์ธ**: CUDA 12.8+ ํ•„์š” (PyTorch 2.2.0์€ ๋ฏธ์ง€์›)
605
+ - **ํ•ด๊ฒฐ**: PyTorch nightly ์„ค์น˜ (์œ„ ์„ค์น˜ ์„น์…˜ ์ฐธ์กฐ)
606
 
607
+ **GPU ๊ฐ์ง€๋˜์ง€๋งŒ CPU ๋ชจ๋“œ๋กœ ๋™์ž‘**:
608
+ - **์›์ธ**: CUDA ํ˜ธํ™˜์„ฑ ํ…Œ์ŠคํŠธ ์‹คํŒจ
609
+ - **ํ•ด๊ฒฐ**: PyTorch ๋ฒ„์ „ ํ™•์ธ, CUDA ๋“œ๋ผ์ด๋ฒ„ ์—…๋ฐ์ดํŠธ
 
610
 
611
  ## ๐Ÿ”— ๊ด€๋ จ ๋ฆฌ์†Œ์Šค
612
 
app.py CHANGED
@@ -501,6 +501,12 @@ with gr.Blocks(title="๐Ÿค– Multi-Model Chatbot", css=custom_css) as demo:
501
  **๋ชจ๋ธ ์„ ํƒ**:
502
  - ๐ŸŽฏ {TOTAL_MODEL_COUNT}๊ฐ€์ง€ ํ•œ๊ธ€ ์ตœ์ ํ™” ๋ชจ๋ธ ({PUBLIC_MODEL_COUNT} Public + {GATED_MODEL_COUNT} Gated)
503
  - ๐Ÿ”„ ๋ชจ๋ธ ์ „ํ™˜ ์‹œ ์ž๋™ ์žฌ๋กœ๋”ฉ (์ฑ„ํŒ… ํžˆ์Šคํ† ๋ฆฌ ์ดˆ๊ธฐํ™”)
 
 
 
 
 
 
504
  """
505
 
506
  # Add hardware-specific features
@@ -609,61 +615,5 @@ with gr.Blocks(title="๐Ÿค– Multi-Model Chatbot", css=custom_css) as demo:
609
  msg.submit(submit, [msg, chatbot], [chatbot, msg])
610
  clear.click(lambda: [], outputs=chatbot)
611
 
612
- # Dynamic footer based on hardware environment
613
- footer = f"""
614
- ---
615
- **ํ˜„์žฌ ํ™˜๊ฒฝ**: {HW_ENV['description']}
616
-
617
- **์ฐธ๊ณ ์‚ฌํ•ญ**:
618
- - ๐Ÿค– {TOTAL_MODEL_COUNT}๊ฐ€์ง€ ๋ชจ๋ธ ์ค‘ ์„ ํƒ ๊ฐ€๋Šฅ
619
- - ๐Ÿ”„ ๋ชจ๋ธ ๋ณ€๊ฒฝ ์‹œ ๋Œ€ํ™” ๋‚ด์—ญ ์ดˆ๊ธฐํ™”
620
- - โฑ๏ธ ์ฒซ ์‘๋‹ต์€ ๋ชจ๋ธ ๋กœ๋”ฉ ์‹œ๊ฐ„ ํฌํ•จ
621
- """
622
-
623
- # Add environment-specific notes
624
- if HW_ENV['hardware'] == 'zerogpu':
625
- footer += """
626
- - โšก ZeroGPU ์ž๋™ GPU ํ• ๋‹น (3-5์ดˆ ์‘๋‹ต)
627
- - ๐Ÿ’ฐ PRO ๊ตฌ๋…์ž ํ•˜๋ฃจ 25๋ถ„ ๋ฌด๋ฃŒ
628
- - โฑ๏ธ ์ฒซ ๋กœ๋”ฉ: ~10-15์ดˆ
629
- """
630
- elif HW_ENV['hardware'] == 'cpu_upgrade':
631
- footer += """
632
- - โฐ 24์‹œ๊ฐ„ ๋ฌด์ œํ•œ ์‚ฌ์šฉ
633
- - โณ CPU ํ™˜๊ฒฝ (30์ดˆ~1๋ถ„ ์‘๋‹ต)
634
- - ๐Ÿ’ฐ ์‹œ๊ฐ„๋‹น $0.03
635
- - โฑ๏ธ ์ฒซ ๋กœ๋”ฉ: ~1-2๋ถ„
636
- """
637
- elif HW_ENV['hardware'] == 'cpu_basic':
638
- footer += """
639
- - ๐Ÿ’ก ๋ฌด๋ฃŒ ํ‹ฐ์–ด (์ œํ•œ์ )
640
- - โณ CPU ํ™˜๊ฒฝ (1~2๋ถ„ ์‘๋‹ต)
641
- - ๐Ÿ”’ ๊ฒฝ๋Ÿ‰ ๋ชจ๋ธ ๊ถŒ์žฅ
642
- - โฑ๏ธ ์ฒซ ๋กœ๋”ฉ: ~2-3๋ถ„
643
- """
644
- elif HW_ENV['hardware'] == 'local_gpu':
645
- footer += f"""
646
- - ๐Ÿ–ฅ๏ธ GPU ๊ฐ€์†: {HW_ENV['gpu_name']}
647
- - โšก ๋น ๋ฅธ ์‘๋‹ต (5-10์ดˆ)
648
- - ๐Ÿ”“ ๋ฌด์ œํ•œ ์‚ฌ์šฉ
649
- - โฑ๏ธ ์ฒซ ๋กœ๋”ฉ: ~10-20์ดˆ
650
- """
651
- else: # local_cpu
652
- footer += f"""
653
- - ๐Ÿ’ป ๋กœ์ปฌ CPU ({HW_ENV['cpu_count']} ์ฝ”์–ด)
654
- - โณ ๋А๋ฆฐ ์‘๋‹ต (1~3๋ถ„)
655
- - ๐Ÿ”’ ๊ฒฝ๋Ÿ‰ ๋ชจ๋ธ ๊ถŒ์žฅ
656
- - โฑ๏ธ ์ฒซ ๋กœ๋”ฉ: ~2-5๋ถ„
657
- """
658
-
659
- footer += """
660
- **ํ…Œ์ŠคํŠธ ์˜ˆ์‹œ**:
661
- - "์•ˆ๋…•ํ•˜์„ธ์š”"
662
- - "์ธ๊ณต์ง€๋Šฅ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”"
663
- - "ํ•œ๊ตญ์˜ ์ˆ˜๋„๋Š” ์–ด๋””์ธ๊ฐ€์š”?"
664
- """
665
-
666
- gr.Markdown(footer)
667
-
668
  if __name__ == "__main__":
669
  demo.launch(server_name="0.0.0.0", server_port=7860)
 
501
  **๋ชจ๋ธ ์„ ํƒ**:
502
  - ๐ŸŽฏ {TOTAL_MODEL_COUNT}๊ฐ€์ง€ ํ•œ๊ธ€ ์ตœ์ ํ™” ๋ชจ๋ธ ({PUBLIC_MODEL_COUNT} Public + {GATED_MODEL_COUNT} Gated)
503
  - ๐Ÿ”„ ๋ชจ๋ธ ์ „ํ™˜ ์‹œ ์ž๋™ ์žฌ๋กœ๋”ฉ (์ฑ„ํŒ… ํžˆ์Šคํ† ๋ฆฌ ์ดˆ๊ธฐํ™”)
504
+ - โฑ๏ธ ์ฒซ ์‘๋‹ต์€ ๋ชจ๋ธ ๋กœ๋”ฉ ์‹œ๊ฐ„ ํฌํ•จ
505
+
506
+ **ํ…Œ์ŠคํŠธ ์˜ˆ์‹œ**:
507
+ - "์•ˆ๋…•ํ•˜์„ธ์š”"
508
+ - "์ธ๊ณต์ง€๋Šฅ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”"
509
+ - "ํ•œ๊ตญ์˜ ์ˆ˜๋„๋Š” ์–ด๋””์ธ๊ฐ€์š”?"
510
  """
511
 
512
  # Add hardware-specific features
 
615
  msg.submit(submit, [msg, chatbot], [chatbot, msg])
616
  clear.click(lambda: [], outputs=chatbot)
617
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
618
  if __name__ == "__main__":
619
  demo.launch(server_name="0.0.0.0", server_port=7860)