mirror of
https://github.com/NVIDIA/dgx-spark-playbooks.git
synced 2026-04-23 18:33:54 +00:00
235 lines
6.4 KiB
Markdown
235 lines
6.4 KiB
Markdown
# GPU Graph Visualization Services
|
|
|
|
## 🚀 Overview
|
|
|
|
This directory contains optional GPU-accelerated graph visualization services that run separately from the main txt2kg application. These services provide advanced visualization capabilities for large-scale graphs.
|
|
|
|
**Note**: These services are **optional** and not included in the default docker-compose configurations. They must be run separately.
|
|
|
|
## 📦 Available Services
|
|
|
|
### 1. Unified GPU Service (`unified_gpu_service.py`)
|
|
Combines **PyGraphistry Cloud** and **Local GPU (cuGraph)** processing into a single FastAPI service.
|
|
|
|
**Processing Modes:**
|
|
| Mode | Description | Requirements |
|
|
|------|-------------|--------------|
|
|
| **PyGraphistry Cloud** | Interactive GPU embeds in browser | API credentials |
|
|
| **Local GPU (cuGraph)** | Full GPU processing on your hardware | NVIDIA GPU + cuGraph |
|
|
| **Local CPU** | NetworkX fallback processing | None |
|
|
|
|
### 2. Remote GPU Rendering Service (`remote_gpu_rendering_service.py`)
|
|
Provides GPU-accelerated graph layout and rendering with iframe-embeddable visualizations.
|
|
|
|
### 3. Local GPU Service (`local_gpu_viz_service.py`)
|
|
Local GPU processing service with WebSocket support for real-time updates.
|
|
|
|
## 🛠️ Setup
|
|
|
|
### Prerequisites
|
|
- NVIDIA GPU with CUDA support (for GPU modes)
|
|
- RAPIDS cuGraph (for local GPU processing)
|
|
- PyGraphistry account (for cloud mode)
|
|
|
|
### Installation
|
|
|
|
```bash
|
|
# Install dependencies
|
|
pip install -r deploy/services/gpu-viz/requirements.txt
|
|
|
|
# For remote WebGPU service
|
|
pip install -r deploy/services/gpu-viz/requirements-remote-webgpu.txt
|
|
```
|
|
|
|
### Running Services
|
|
|
|
#### Unified GPU Service
|
|
```bash
|
|
cd deploy/services/gpu-viz
|
|
python unified_gpu_service.py
|
|
```
|
|
|
|
Service runs on: http://localhost:8080
|
|
|
|
#### Remote GPU Rendering Service
|
|
```bash
|
|
cd deploy/services/gpu-viz
|
|
python remote_gpu_rendering_service.py
|
|
```
|
|
|
|
Service runs on: http://localhost:8082
|
|
|
|
#### Using Startup Script
|
|
```bash
|
|
cd deploy/services/gpu-viz
|
|
./start_remote_gpu_services.sh
|
|
```
|
|
|
|
## 📡 API Usage
|
|
|
|
### Process Graph with Mode Selection
|
|
|
|
```bash
|
|
curl -X POST http://localhost:8080/api/visualize \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"graph_data": {
|
|
"nodes": [{"id": "1", "name": "Node 1"}, {"id": "2", "name": "Node 2"}],
|
|
"links": [{"source": "1", "target": "2", "name": "edge_1_2"}]
|
|
},
|
|
"processing_mode": "local_gpu",
|
|
"layout_algorithm": "force_atlas2",
|
|
"clustering_algorithm": "leiden",
|
|
"compute_centrality": true
|
|
}'
|
|
```
|
|
|
|
### Check Available Capabilities
|
|
|
|
```bash
|
|
curl http://localhost:8080/api/capabilities
|
|
```
|
|
|
|
Response:
|
|
```json
|
|
{
|
|
"processing_modes": {
|
|
"pygraphistry_cloud": {"available": true, "description": "..."},
|
|
"local_gpu": {"available": true, "description": "..."},
|
|
"local_cpu": {"available": true, "description": "..."}
|
|
},
|
|
"has_rapids": true,
|
|
"gpu_available": true
|
|
}
|
|
```
|
|
|
|
## 🎯 Frontend Integration
|
|
|
|
The txt2kg frontend includes built-in components for GPU visualization:
|
|
|
|
- `UnifiedGPUViewer`: Connects to unified GPU service
|
|
- `PyGraphistryViewer`: Direct PyGraphistry cloud integration
|
|
- `ForceGraphWrapper`: Three.js WebGPU visualization (default)
|
|
|
|
### Using GPU Services in Frontend
|
|
|
|
The frontend has API routes that can connect to these services:
|
|
- `/api/pygraphistry/*`: PyGraphistry integration
|
|
- `/api/unified-gpu/*`: Unified GPU service integration
|
|
|
|
To use these services, ensure they are running separately and configure the frontend environment variables accordingly.
|
|
|
|
### Mode-Specific Processing
|
|
|
|
```javascript
|
|
// PyGraphistry Cloud mode
|
|
const response = await fetch('/api/unified-gpu/visualize', {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({
|
|
graph_data: { nodes, links },
|
|
processing_mode: 'pygraphistry_cloud',
|
|
layout_type: 'force',
|
|
clustering: true,
|
|
gpu_acceleration: true
|
|
})
|
|
})
|
|
|
|
// Local GPU mode
|
|
const response = await fetch('/api/unified-gpu/visualize', {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({
|
|
graph_data: { nodes, links },
|
|
processing_mode: 'local_gpu',
|
|
layout_algorithm: 'force_atlas2',
|
|
clustering_algorithm: 'leiden',
|
|
compute_centrality: true
|
|
})
|
|
})
|
|
```
|
|
|
|
## 🔧 Configuration Options
|
|
|
|
### PyGraphistry Cloud Mode
|
|
- `layout_type`: "force", "circular", "hierarchical"
|
|
- `gpu_acceleration`: true/false
|
|
- `clustering`: true/false
|
|
|
|
### Local GPU Mode
|
|
- `layout_algorithm`: "force_atlas2", "spectral", "fruchterman_reingold"
|
|
- `clustering_algorithm`: "leiden", "louvain", "spectral"
|
|
- `compute_centrality`: true/false
|
|
|
|
### Local CPU Mode
|
|
- Basic processing with NetworkX fallback
|
|
- No additional configuration needed
|
|
|
|
## 📊 Response Format
|
|
|
|
```json
|
|
{
|
|
"processed_nodes": [...],
|
|
"processed_edges": [...],
|
|
"processing_mode": "local_gpu",
|
|
"embed_url": "https://hub.graphistry.com/...", // Only for cloud mode
|
|
"layout_positions": {...}, // Only for local GPU mode
|
|
"clusters": {...},
|
|
"centrality": {...},
|
|
"stats": {
|
|
"node_count": 1000,
|
|
"edge_count": 5000,
|
|
"gpu_accelerated": true,
|
|
"layout_computed": true,
|
|
"clusters_computed": true
|
|
},
|
|
"timestamp": "2024-01-01T12:00:00Z"
|
|
}
|
|
```
|
|
|
|
## 🚀 Benefits of Unified Approach
|
|
|
|
### ✅ Advantages
|
|
- **Single service** - One port, one deployment
|
|
- **Mode switching** - Choose best processing per graph
|
|
- **Fallback handling** - Graceful degradation if GPU unavailable
|
|
- **Consistent API** - Same interface for all modes
|
|
- **Better testing** - Easy comparison between modes
|
|
|
|
### 🎯 Use Cases
|
|
- **PyGraphistry Cloud**: Sharing visualizations, demos, production embeds
|
|
- **Local GPU**: Private data, large-scale processing, custom algorithms
|
|
- **Local CPU**: Development, testing, small graphs
|
|
|
|
## 🐛 Troubleshooting
|
|
|
|
### GPU Not Detected
|
|
```bash
|
|
# Check GPU availability
|
|
nvidia-smi
|
|
|
|
# Check RAPIDS installation
|
|
python -c "import cudf, cugraph; print('RAPIDS OK')"
|
|
```
|
|
|
|
### PyGraphistry Credentials
|
|
```bash
|
|
# Verify credentials are set
|
|
echo $GRAPHISTRY_PERSONAL_KEY
|
|
echo $GRAPHISTRY_SECRET_KEY
|
|
|
|
# Test connection
|
|
python -c "import graphistry; graphistry.register(personal_key_id='$GRAPHISTRY_PERSONAL_KEY', personal_key_secret='$GRAPHISTRY_SECRET_KEY'); print('PyGraphistry OK')"
|
|
```
|
|
|
|
### Service Health
|
|
```bash
|
|
curl http://localhost:8080/api/health
|
|
```
|
|
|
|
## 📈 Performance Tips
|
|
|
|
1. **Large graphs (>100k nodes)**: Use `local_gpu` mode
|
|
2. **Sharing/demos**: Use `pygraphistry_cloud` mode
|
|
3. **Development**: Use `local_cpu` mode for speed
|
|
4. **Mixed workloads**: Switch modes dynamically based on graph size |