Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .vitepress/sidebar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -579,6 +579,10 @@ export function getSidebar() {
},
],
},
{
text: '🤖 AI Framework Support',
link: '/protocol/ai',
},
],
},
],
Expand Down
179 changes: 179 additions & 0 deletions src/protocol/ai.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
---
title: AI Framework Support
description:
Comprehensive guide to AI framework compatibility and support on the iExec
platform
---

# 🤖 AI Framework Support

The iExec Platform provides comprehensive support for popular AI and machine
learning frameworks. Deploy confidential AI with ease. iExec supports popular
AI/ML frameworks, running in secure Trusted Execution Environments (TEEs) with

Check notice on line 12 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L12

[Google.Parens] Use parentheses judiciously.
Raw output
{"message": "[Google.Parens] Use parentheses judiciously.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 12, "column": 68}}}, "severity": "INFO"}
optimized configurations.

## 🚀 Quick Start

**Want to get started immediately?**

- 📚
**[AI Frameworks Hello World](https://github.com/iExecBlockchainComputing/ai-frameworks-hello-world)** -
Ready-to-use Docker examples for TensorFlow, PyTorch, and more
- 🛠️ **[Build & Deploy](/guides/build-iapp/build-&-deploy)** - General iApp
development guide (not AI-specific)

Check notice on line 23 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L23

[Google.Parens] Use parentheses judiciously.
Raw output
{"message": "[Google.Parens] Use parentheses judiciously.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 23, "column": 21}}}, "severity": "INFO"}
- 🔬
**[TDX App Guide](/guides/build-iapp/advanced/create-your-first-tdx-app)** -
Build TDX applications (works well for AI workloads)

Check notice on line 26 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L26

[Google.Acronyms] Spell out 'TDX', if it's unfamiliar to the audience.
Raw output
{"message": "[Google.Acronyms] Spell out 'TDX', if it's unfamiliar to the audience.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 26, "column": 9}}}, "severity": "INFO"}

Check notice on line 26 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L26

[Google.Parens] Use parentheses judiciously.
Raw output
{"message": "[Google.Parens] Use parentheses judiciously.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 26, "column": 26}}}, "severity": "INFO"}

## 🛡️ Why iExec for AI?

### Confidential Computing

Check warning on line 30 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L30

[Google.Headings] 'Confidential Computing' should use sentence-style capitalization.
Raw output
{"message": "[Google.Headings] 'Confidential Computing' should use sentence-style capitalization.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 30, "column": 5}}}, "severity": "WARNING"}

Trusted Execution Environments (TEEs) protect your AI models and data

Check notice on line 32 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L32

[Google.Parens] Use parentheses judiciously.
Raw output
{"message": "[Google.Parens] Use parentheses judiciously.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 32, "column": 32}}}, "severity": "INFO"}
end-to-end:

- **Data Privacy**: TEEs isolate AI computations in secure enclaves
- **Secure Training & Inference**: Unauthorized entities can never access your
models and data
- **Hardware-Level Security**: Intel SGX and TDX provide enterprise-grade

Check failure on line 38 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L38

[Vale.Terms] Use 'intel' instead of 'Intel'.
Raw output
{"message": "[Vale.Terms] Use 'intel' instead of 'Intel'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 38, "column": 32}}}, "severity": "ERROR"}

Check notice on line 38 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L38

[Google.Acronyms] Spell out 'SGX', if it's unfamiliar to the audience.
Raw output
{"message": "[Google.Acronyms] Spell out 'SGX', if it's unfamiliar to the audience.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 38, "column": 38}}}, "severity": "INFO"}

Check notice on line 38 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L38

[Google.Acronyms] Spell out 'TDX', if it's unfamiliar to the audience.
Raw output
{"message": "[Google.Acronyms] Spell out 'TDX', if it's unfamiliar to the audience.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 38, "column": 46}}}, "severity": "INFO"}
protection

### AI Monetization

Check warning on line 41 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L41

[Google.Headings] 'AI Monetization' should use sentence-style capitalization.
Raw output
{"message": "[Google.Headings] 'AI Monetization' should use sentence-style capitalization.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 41, "column": 5}}}, "severity": "WARNING"}

Monetize your AI assets easily and securely:

- **Datasets**: Encrypt and sell access to your training data
- **Models**: Deploy and monetize your trained AI models
- **Agents**: Create and sell AI agents and applications
- **Ownership Preserved**: Your digital assets always remain yours

### Decentralized Infrastructure

Scale AI applications without centralized cloud dependencies:

- **On-Demand Compute**: Access powerful resources when you need them
- **Fair Pricing**: Blockchain verifies execution costs transparently

Check failure on line 55 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L55

[Vale.Terms] Use 'blockchain' instead of 'Blockchain'.
Raw output
{"message": "[Vale.Terms] Use 'blockchain' instead of 'Blockchain'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 55, "column": 21}}}, "severity": "ERROR"}
- **Global Network**: Deploy across a worldwide network of secure workers

## 🤖 AI Framework Support

### Overview

| Framework | TDX Support | SGX Support | Best For |

Check notice on line 62 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L62

[Google.Acronyms] Spell out 'TDX', if it's unfamiliar to the audience.
Raw output
{"message": "[Google.Acronyms] Spell out 'TDX', if it's unfamiliar to the audience.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 62, "column": 22}}}, "severity": "INFO"}

Check notice on line 62 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L62

[Google.Acronyms] Spell out 'SGX', if it's unfamiliar to the audience.
Raw output
{"message": "[Google.Acronyms] Spell out 'SGX', if it's unfamiliar to the audience.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 62, "column": 40}}}, "severity": "INFO"}
| ---------------- | --------------- | --------------- | ----------------------------- |
| **TensorFlow** | ✅ Yes (3.01GB) | ❌ No | Deep learning, production ML |

Check notice on line 64 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L64

[Google.Parens] Use parentheses judiciously.
Raw output
{"message": "[Google.Parens] Use parentheses judiciously.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 64, "column": 28}}}, "severity": "INFO"}

Check failure on line 64 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L64

[Google.Units] Put a nonbreaking space between the number and the unit in '01GB'.
Raw output
{"message": "[Google.Units] Put a nonbreaking space between the number and the unit in '01GB'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 64, "column": 31}}}, "severity": "ERROR"}
| **PyTorch** | ✅ Yes (6.44GB) | ❌ No | Research, computer vision |

Check notice on line 65 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L65

[Google.Parens] Use parentheses judiciously.
Raw output
{"message": "[Google.Parens] Use parentheses judiciously.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 65, "column": 28}}}, "severity": "INFO"}

Check failure on line 65 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L65

[Google.Units] Put a nonbreaking space between the number and the unit in '44GB'.
Raw output
{"message": "[Google.Units] Put a nonbreaking space between the number and the unit in '44GB'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 65, "column": 31}}}, "severity": "ERROR"}
| **Scikit-learn** | ✅ Yes (1.18GB) | ✅ Yes (1.01GB) | Traditional ML, data analysis |

Check notice on line 66 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L66

[Google.Parens] Use parentheses judiciously.
Raw output
{"message": "[Google.Parens] Use parentheses judiciously.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 66, "column": 28}}}, "severity": "INFO"}

Check failure on line 66 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L66

[Google.Units] Put a nonbreaking space between the number and the unit in '18GB'.
Raw output
{"message": "[Google.Units] Put a nonbreaking space between the number and the unit in '18GB'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 66, "column": 31}}}, "severity": "ERROR"}

Check notice on line 66 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L66

[Google.Parens] Use parentheses judiciously.
Raw output
{"message": "[Google.Parens] Use parentheses judiciously.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 66, "column": 45}}}, "severity": "INFO"}

Check failure on line 66 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L66

[Google.Units] Put a nonbreaking space between the number and the unit in '01GB'.
Raw output
{"message": "[Google.Units] Put a nonbreaking space between the number and the unit in '01GB'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 66, "column": 48}}}, "severity": "ERROR"}
| **OpenVINO** | ✅ Yes (1.82GB) | ❌ No | Computer vision, inference |

Check notice on line 67 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L67

[Google.Parens] Use parentheses judiciously.
Raw output
{"message": "[Google.Parens] Use parentheses judiciously.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 67, "column": 28}}}, "severity": "INFO"}

Check failure on line 67 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L67

[Google.Units] Put a nonbreaking space between the number and the unit in '82GB'.
Raw output
{"message": "[Google.Units] Put a nonbreaking space between the number and the unit in '82GB'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 67, "column": 31}}}, "severity": "ERROR"}
| **NumPy** | ✅ Yes (1.25GB) | ✅ Yes (1.08GB) | Scientific computing |

Check notice on line 68 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L68

[Google.Parens] Use parentheses judiciously.
Raw output
{"message": "[Google.Parens] Use parentheses judiciously.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 68, "column": 28}}}, "severity": "INFO"}

Check failure on line 68 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L68

[Google.Units] Put a nonbreaking space between the number and the unit in '25GB'.
Raw output
{"message": "[Google.Units] Put a nonbreaking space between the number and the unit in '25GB'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 68, "column": 31}}}, "severity": "ERROR"}

Check notice on line 68 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L68

[Google.Parens] Use parentheses judiciously.
Raw output
{"message": "[Google.Parens] Use parentheses judiciously.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 68, "column": 45}}}, "severity": "INFO"}

Check failure on line 68 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L68

[Google.Units] Put a nonbreaking space between the number and the unit in '08GB'.
Raw output
{"message": "[Google.Units] Put a nonbreaking space between the number and the unit in '08GB'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 68, "column": 48}}}, "severity": "ERROR"}
| **Matplotlib** | ✅ Yes (1.25GB) | ✅ Yes (1.08GB) | Data visualization |

Check failure on line 69 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L69

[Vale.Spelling] Did you really mean 'Matplotlib'?
Raw output
{"message": "[Vale.Spelling] Did you really mean 'Matplotlib'?", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 69, "column": 5}}}, "severity": "ERROR"}

Check notice on line 69 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L69

[Google.Parens] Use parentheses judiciously.
Raw output
{"message": "[Google.Parens] Use parentheses judiciously.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 69, "column": 28}}}, "severity": "INFO"}

Check failure on line 69 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L69

[Google.Units] Put a nonbreaking space between the number and the unit in '25GB'.
Raw output
{"message": "[Google.Units] Put a nonbreaking space between the number and the unit in '25GB'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 69, "column": 31}}}, "severity": "ERROR"}

Check notice on line 69 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L69

[Google.Parens] Use parentheses judiciously.
Raw output
{"message": "[Google.Parens] Use parentheses judiciously.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 69, "column": 45}}}, "severity": "INFO"}

Check failure on line 69 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L69

[Google.Units] Put a nonbreaking space between the number and the unit in '08GB'.
Raw output
{"message": "[Google.Units] Put a nonbreaking space between the number and the unit in '08GB'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 69, "column": 48}}}, "severity": "ERROR"}

### Framework Details

Check warning on line 71 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L71

[Google.Headings] 'Framework Details' should use sentence-style capitalization.
Raw output
{"message": "[Google.Headings] 'Framework Details' should use sentence-style capitalization.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 71, "column": 5}}}, "severity": "WARNING"}

| Framework | Version | Description | TDX Support | SGX Support | Use Cases | Resources |

Check notice on line 73 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L73

[Google.Acronyms] Spell out 'TDX', if it's unfamiliar to the audience.
Raw output
{"message": "[Google.Acronyms] Spell out 'TDX', if it's unfamiliar to the audience.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 73, "column": 84}}}, "severity": "INFO"}

Check notice on line 73 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L73

[Google.Acronyms] Spell out 'SGX', if it's unfamiliar to the audience.
Raw output
{"message": "[Google.Acronyms] Spell out 'SGX', if it's unfamiliar to the audience.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 73, "column": 98}}}, "severity": "INFO"}
| ---------------- | ----------- | --------------------------------------------- | ----------- | ------------------- | -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **TensorFlow** | 2.19.0 | Google's ML framework for production AI | ✅ 3.01GB | ❌ Too large | Deep learning, CV, NLP | [Docs](https://www.tensorflow.org/) • [Quickstart](https://www.tensorflow.org/tutorials/quickstart/beginner) • [Docker](https://github.com/iExecBlockchainComputing/ai-frameworks-hello-world/tree/main/tensorflow) |

Check failure on line 75 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L75

[Google.Units] Put a nonbreaking space between the number and the unit in '01GB'.
Raw output
{"message": "[Google.Units] Put a nonbreaking space between the number and the unit in '01GB'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 75, "column": 88}}}, "severity": "ERROR"}

Check notice on line 75 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L75

[Google.Acronyms] Spell out 'NLP', if it's unfamiliar to the audience.
Raw output
{"message": "[Google.Acronyms] Spell out 'NLP', if it's unfamiliar to the audience.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 75, "column": 137}}}, "severity": "INFO"}
| **PyTorch** | 2.7.0+cu126 | Facebook's research-focused DL framework | ✅ 6.44GB | ❌ Too large | Research, DL, CV, NLP | [Docs](https://pytorch.org/docs/) • [Quickstart](https://docs.pytorch.org/tutorials/beginner/basics/quickstart_tutorial.html) • [Docker](https://github.com/iExecBlockchainComputing/ai-frameworks-hello-world/tree/main/pytorch) |

Check failure on line 76 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L76

[Google.Units] Put a nonbreaking space between the number and the unit in '44GB'.
Raw output
{"message": "[Google.Units] Put a nonbreaking space between the number and the unit in '44GB'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 76, "column": 88}}}, "severity": "ERROR"}

Check notice on line 76 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L76

[Google.Acronyms] Spell out 'NLP', if it's unfamiliar to the audience.
Raw output
{"message": "[Google.Acronyms] Spell out 'NLP', if it's unfamiliar to the audience.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 76, "column": 136}}}, "severity": "INFO"}
| **Scikit-learn** | 1.6.1 | Comprehensive ML library for Python | ✅ 1.18GB | ✅ 1.01GB | Classification, regression, clustering | [Docs](https://scikit-learn.org/stable/) • [Examples](https://scikit-learn.org/stable/auto_examples/index.html) • [Docker](https://github.com/iExecBlockchainComputing/ai-frameworks-hello-world/tree/main/scikit) |

Check failure on line 77 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L77

[Google.Units] Put a nonbreaking space between the number and the unit in '18GB'.
Raw output
{"message": "[Google.Units] Put a nonbreaking space between the number and the unit in '18GB'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 77, "column": 88}}}, "severity": "ERROR"}

Check failure on line 77 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L77

[Google.Units] Put a nonbreaking space between the number and the unit in '01GB'.
Raw output
{"message": "[Google.Units] Put a nonbreaking space between the number and the unit in '01GB'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 77, "column": 101}}}, "severity": "ERROR"}
| **OpenVINO** | 2024.6.0 | Intel's high-performance AI inference toolkit | ✅ 1.82GB | ❌ Execution issues | Computer vision, inference | [Docs](https://docs.openvino.ai/) • [Tutorial](https://docs.openvino.ai/2023.3/notebooks/004-hello-detection-with-output.html) • [Docker](https://github.com/iExecBlockchainComputing/ai-frameworks-hello-world/tree/main/openvino) |

Check failure on line 78 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L78

[Vale.Terms] Use 'intel' instead of 'Intel'.
Raw output
{"message": "[Vale.Terms] Use 'intel' instead of 'Intel'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 78, "column": 36}}}, "severity": "ERROR"}

Check failure on line 78 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L78

[Google.Units] Put a nonbreaking space between the number and the unit in '82GB'.
Raw output
{"message": "[Google.Units] Put a nonbreaking space between the number and the unit in '82GB'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 78, "column": 88}}}, "severity": "ERROR"}
| **NumPy** | 2.0.2 | Fundamental package for scientific computing | ✅ 1.25GB | ✅ 1.08GB | Scientific computing, data analysis | [Docs](https://numpy.org/doc/) • [User Guide](https://numpy.org/doc/stable/user/index.html) • [Docker](https://github.com/iExecBlockchainComputing/ai-frameworks-hello-world/tree/main/numpy) |

Check failure on line 79 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L79

[Google.Units] Put a nonbreaking space between the number and the unit in '25GB'.
Raw output
{"message": "[Google.Units] Put a nonbreaking space between the number and the unit in '25GB'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 79, "column": 88}}}, "severity": "ERROR"}

Check failure on line 79 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L79

[Google.Units] Put a nonbreaking space between the number and the unit in '08GB'.
Raw output
{"message": "[Google.Units] Put a nonbreaking space between the number and the unit in '08GB'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 79, "column": 101}}}, "severity": "ERROR"}
| **Matplotlib** | 3.9.4 | Comprehensive library for data visualization | ✅ 1.25GB | ✅ 1.08GB | Data visualization, plotting | [Docs](https://matplotlib.org/) • [Gallery](https://matplotlib.org/stable/gallery/index.html) • [Docker](https://github.com/iExecBlockchainComputing/ai-frameworks-hello-world/tree/main/matplotlib) |

Check failure on line 80 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L80

[Vale.Spelling] Did you really mean 'Matplotlib'?
Raw output
{"message": "[Vale.Spelling] Did you really mean 'Matplotlib'?", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 80, "column": 5}}}, "severity": "ERROR"}

Check failure on line 80 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L80

[Google.Units] Put a nonbreaking space between the number and the unit in '25GB'.
Raw output
{"message": "[Google.Units] Put a nonbreaking space between the number and the unit in '25GB'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 80, "column": 88}}}, "severity": "ERROR"}

Check failure on line 80 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L80

[Google.Units] Put a nonbreaking space between the number and the unit in '08GB'.
Raw output
{"message": "[Google.Units] Put a nonbreaking space between the number and the unit in '08GB'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 80, "column": 101}}}, "severity": "ERROR"}

## 🐳 Getting Started with Docker Examples

### What's Included

Our

Check warning on line 86 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L86

[Google.We] Try to avoid using first-person plural like 'Our'.
Raw output
{"message": "[Google.We] Try to avoid using first-person plural like 'Our'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 86, "column": 1}}}, "severity": "WARNING"}
[AI Frameworks Hello World repository](https://github.com/iExecBlockchainComputing/ai-frameworks-hello-world)
includes ready-to-use examples:

```
ai-frameworks-hello-world/
├── tensorflow/ # TensorFlow 2.19.0 example
├── pytorch/ # PyTorch 2.7.0+cu126 example
├── scikit/ # Scikit-learn 1.6.1 example
├── openvino/ # OpenVINO 2024.6.0 example
├── numpy/ # NumPy 2.0.2 example
└── matplotlib/ # Matplotlib 3.9.4 example
```

### Quick Start Commands

Check warning on line 100 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L100

[Google.Headings] 'Quick Start Commands' should use sentence-style capitalization.
Raw output
{"message": "[Google.Headings] 'Quick Start Commands' should use sentence-style capitalization.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 100, "column": 5}}}, "severity": "WARNING"}

```bash
# Clone the repository
git clone https://github.com/iExecBlockchainComputing/ai-frameworks-hello-world.git
cd ai-frameworks-hello-world

# Try TensorFlow example
cd tensorflow
docker build -t hello-tensorflow .
docker run --rm hello-tensorflow

# Try PyTorch example
cd ../pytorch
docker build -t hello-pytorch .
docker run --rm hello-pytorch
```

### Features

- **✅ Isolated Testing**: Each framework runs in its own container
- **✅ Reproducible**: Consistent environment across systems
- **✅ TDX Ready**: All containers tested for Intel TDX compatibility

Check notice on line 122 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L122

[Google.Acronyms] Spell out 'TDX', if it's unfamiliar to the audience.
Raw output
{"message": "[Google.Acronyms] Spell out 'TDX', if it's unfamiliar to the audience.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 122, "column": 7}}}, "severity": "INFO"}

Check failure on line 122 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L122

[Vale.Terms] Use 'intel' instead of 'Intel'.
Raw output
{"message": "[Vale.Terms] Use 'intel' instead of 'Intel'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 122, "column": 46}}}, "severity": "ERROR"}

Check notice on line 122 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L122

[Google.Acronyms] Spell out 'TDX', if it's unfamiliar to the audience.
Raw output
{"message": "[Google.Acronyms] Spell out 'TDX', if it's unfamiliar to the audience.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 122, "column": 52}}}, "severity": "INFO"}
- **✅ Easy Deployment**: Simple build and run commands

## 📊 Technology Comparison

### TDX vs SGX for AI

Check warning on line 127 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L127

[Google.Headings] 'TDX vs SGX for AI' should use sentence-style capitalization.
Raw output
{"message": "[Google.Headings] 'TDX vs SGX for AI' should use sentence-style capitalization.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 127, "column": 5}}}, "severity": "WARNING"}

Check notice on line 127 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L127

[Google.Acronyms] Spell out 'TDX', if it's unfamiliar to the audience.
Raw output
{"message": "[Google.Acronyms] Spell out 'TDX', if it's unfamiliar to the audience.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 127, "column": 5}}}, "severity": "INFO"}

Check notice on line 127 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L127

[Google.Acronyms] Spell out 'SGX', if it's unfamiliar to the audience.
Raw output
{"message": "[Google.Acronyms] Spell out 'SGX', if it's unfamiliar to the audience.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 127, "column": 12}}}, "severity": "INFO"}

| Feature | Intel TDX | Intel SGX |

Check failure on line 129 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L129

[Vale.Terms] Use 'intel' instead of 'Intel'.
Raw output
{"message": "[Vale.Terms] Use 'intel' instead of 'Intel'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 129, "column": 27}}}, "severity": "ERROR"}

Check notice on line 129 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L129

[Google.Acronyms] Spell out 'TDX', if it's unfamiliar to the audience.
Raw output
{"message": "[Google.Acronyms] Spell out 'TDX', if it's unfamiliar to the audience.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 129, "column": 33}}}, "severity": "INFO"}

Check failure on line 129 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L129

[Vale.Terms] Use 'intel' instead of 'Intel'.
Raw output
{"message": "[Vale.Terms] Use 'intel' instead of 'Intel'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 129, "column": 56}}}, "severity": "ERROR"}

Check notice on line 129 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L129

[Google.Acronyms] Spell out 'SGX', if it's unfamiliar to the audience.
Raw output
{"message": "[Google.Acronyms] Spell out 'SGX', if it's unfamiliar to the audience.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 129, "column": 62}}}, "severity": "INFO"}
| --------------------- | -------------------------- | ---------------------------------- |
| **Memory Limit** | Multi-GB+ | ~1.95GB |

Check failure on line 131 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L131

[Google.Units] Put a nonbreaking space between the number and the unit in '95GB'.
Raw output
{"message": "[Google.Units] Put a nonbreaking space between the number and the unit in '95GB'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 131, "column": 59}}}, "severity": "ERROR"}
| **Framework Support** | All major frameworks | Limited (Scikit-learn, NumPy) |

Check notice on line 132 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L132

[Google.Parens] Use parentheses judiciously.
Raw output
{"message": "[Google.Parens] Use parentheses judiciously.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 132, "column": 64}}}, "severity": "INFO"}
| **Code Changes** | Minimal ("lift and shift") | Significant modifications required |

Check notice on line 133 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L133

[Google.Parens] Use parentheses judiciously.
Raw output
{"message": "[Google.Parens] Use parentheses judiciously.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 133, "column": 35}}}, "severity": "INFO"}
| **Production Ready** | ✅ Yes | ⚠️ Limited |
| **AI Workloads** | ✅ Excellent | ❌ Restricted |

### Recommendations

#### For Production AI Applications

Check warning on line 139 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L139

[Google.Headings] 'For Production AI Applications' should use sentence-style capitalization.
Raw output
{"message": "[Google.Headings] 'For Production AI Applications' should use sentence-style capitalization.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 139, "column": 6}}}, "severity": "WARNING"}

- **Use TDX** for TensorFlow, PyTorch, and OpenVINO

Check notice on line 141 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L141

[Google.Acronyms] Spell out 'TDX', if it's unfamiliar to the audience.
Raw output
{"message": "[Google.Acronyms] Spell out 'TDX', if it's unfamiliar to the audience.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 141, "column": 9}}}, "severity": "INFO"}
- **Use SGX** for lightweight ML with Scikit-learn and NumPy

Check notice on line 142 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L142

[Google.Acronyms] Spell out 'SGX', if it's unfamiliar to the audience.
Raw output
{"message": "[Google.Acronyms] Spell out 'SGX', if it's unfamiliar to the audience.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 142, "column": 9}}}, "severity": "INFO"}

#### For Development and Testing

Check warning on line 144 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L144

[Google.Headings] 'For Development and Testing' should use sentence-style capitalization.
Raw output
{"message": "[Google.Headings] 'For Development and Testing' should use sentence-style capitalization.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 144, "column": 6}}}, "severity": "WARNING"}

- **Start with SGX** for simple ML tasks

Check notice on line 146 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L146

[Google.Acronyms] Spell out 'SGX', if it's unfamiliar to the audience.
Raw output
{"message": "[Google.Acronyms] Spell out 'SGX', if it's unfamiliar to the audience.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 146, "column": 16}}}, "severity": "INFO"}
- **Migrate to TDX** for complex AI workloads

Check notice on line 147 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L147

[Google.Acronyms] Spell out 'TDX', if it's unfamiliar to the audience.
Raw output
{"message": "[Google.Acronyms] Spell out 'TDX', if it's unfamiliar to the audience.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 147, "column": 16}}}, "severity": "INFO"}

#### Important Considerations

Check warning on line 149 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L149

[Google.Headings] 'Important Considerations' should use sentence-style capitalization.
Raw output
{"message": "[Google.Headings] 'Important Considerations' should use sentence-style capitalization.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 149, "column": 6}}}, "severity": "WARNING"}

- **SGX Limitations**: Expect potential library incompatibilities and code

Check notice on line 151 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L151

[Google.Acronyms] Spell out 'SGX', if it's unfamiliar to the audience.
Raw output
{"message": "[Google.Acronyms] Spell out 'SGX', if it's unfamiliar to the audience.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 151, "column": 5}}}, "severity": "INFO"}
modifications
- **TDX Advantages**: Minimal code changes required ("lift and shift" approach)

Check notice on line 153 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L153

[Google.Acronyms] Spell out 'TDX', if it's unfamiliar to the audience.
Raw output
{"message": "[Google.Acronyms] Spell out 'TDX', if it's unfamiliar to the audience.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 153, "column": 5}}}, "severity": "INFO"}

Check notice on line 153 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L153

[Google.Parens] Use parentheses judiciously.
Raw output
{"message": "[Google.Parens] Use parentheses judiciously.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 153, "column": 53}}}, "severity": "INFO"}

## 📚 Next Steps

### Learn TEE Technologies

Check warning on line 157 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L157

[Google.Headings] 'Learn TEE Technologies' should use sentence-style capitalization.
Raw output
{"message": "[Google.Headings] 'Learn TEE Technologies' should use sentence-style capitalization.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 157, "column": 5}}}, "severity": "WARNING"}

Check notice on line 157 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L157

[Google.Acronyms] Spell out 'TEE', if it's unfamiliar to the audience.
Raw output
{"message": "[Google.Acronyms] Spell out 'TEE', if it's unfamiliar to the audience.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 157, "column": 11}}}, "severity": "INFO"}

- **[Intel SGX Technology](/protocol/tee/intel-sgx)** - SGX limitations and

Check failure on line 159 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L159

[Vale.Terms] Use 'intel' instead of 'Intel'.
Raw output
{"message": "[Vale.Terms] Use 'intel' instead of 'Intel'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 159, "column": 6}}}, "severity": "ERROR"}

Check notice on line 159 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L159

[Google.Acronyms] Spell out 'SGX', if it's unfamiliar to the audience.
Raw output
{"message": "[Google.Acronyms] Spell out 'SGX', if it's unfamiliar to the audience.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 159, "column": 12}}}, "severity": "INFO"}

Check notice on line 159 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L159

[Google.Acronyms] Spell out 'SGX', if it's unfamiliar to the audience.
Raw output
{"message": "[Google.Acronyms] Spell out 'SGX', if it's unfamiliar to the audience.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 159, "column": 57}}}, "severity": "INFO"}
capabilities
- **[Intel TDX Technology](/protocol/tee/intel-tdx)** - TDX advantages for AI

Check failure on line 161 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L161

[Vale.Terms] Use 'intel' instead of 'Intel'.
Raw output
{"message": "[Vale.Terms] Use 'intel' instead of 'Intel'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 161, "column": 6}}}, "severity": "ERROR"}

Check notice on line 161 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L161

[Google.Acronyms] Spell out 'TDX', if it's unfamiliar to the audience.
Raw output
{"message": "[Google.Acronyms] Spell out 'TDX', if it's unfamiliar to the audience.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 161, "column": 12}}}, "severity": "INFO"}

Check notice on line 161 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L161

[Google.Acronyms] Spell out 'TDX', if it's unfamiliar to the audience.
Raw output
{"message": "[Google.Acronyms] Spell out 'TDX', if it's unfamiliar to the audience.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 161, "column": 57}}}, "severity": "INFO"}
- **[SGX vs TDX Comparison](/protocol/tee/sgx-vs-tdx)** - Detailed comparison

Check notice on line 162 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L162

[Google.Acronyms] Spell out 'SGX', if it's unfamiliar to the audience.
Raw output
{"message": "[Google.Acronyms] Spell out 'SGX', if it's unfamiliar to the audience.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 162, "column": 6}}}, "severity": "INFO"}

Check notice on line 162 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L162

[Google.Acronyms] Spell out 'TDX', if it's unfamiliar to the audience.
Raw output
{"message": "[Google.Acronyms] Spell out 'TDX', if it's unfamiliar to the audience.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 162, "column": 13}}}, "severity": "INFO"}

### Build AI Applications

Check warning on line 164 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L164

[Google.Headings] 'Build AI Applications' should use sentence-style capitalization.
Raw output
{"message": "[Google.Headings] 'Build AI Applications' should use sentence-style capitalization.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 164, "column": 5}}}, "severity": "WARNING"}

- **[Build & Test](/guides/build-iapp/build-&-test)** - Build and test your AI
application

Check warning on line 167 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L167

[Google.WordList] Use 'app' instead of 'application'.
Raw output
{"message": "[Google.WordList] Use 'app' instead of 'application'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 167, "column": 3}}}, "severity": "WARNING"}
- **[Deploy & Run](/guides/build-iapp/deploy-&-run)** - Deploy and run your AI
application

Check warning on line 169 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L169

[Google.WordList] Use 'app' instead of 'application'.
Raw output
{"message": "[Google.WordList] Use 'app' instead of 'application'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 169, "column": 3}}}, "severity": "WARNING"}
- **[Build Intel TDX App](/guides/build-iapp/advanced/build-your-first-tdx-iapp)** -

Check failure on line 170 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L170

[Vale.Terms] Use 'intel' instead of 'Intel'.
Raw output
{"message": "[Vale.Terms] Use 'intel' instead of 'Intel'.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 170, "column": 12}}}, "severity": "ERROR"}
TDX applications for AI workloads

Check notice on line 171 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L171

[Google.Acronyms] Spell out 'TDX', if it's unfamiliar to the audience.
Raw output
{"message": "[Google.Acronyms] Spell out 'TDX', if it's unfamiliar to the audience.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 171, "column": 3}}}, "severity": "INFO"}
- **[Inputs and Outputs](/guides/build-iapp/inputs-and-outputs)** - Handle data
flow in TEE environment

Check notice on line 173 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L173

[Google.Acronyms] Spell out 'TEE', if it's unfamiliar to the audience.
Raw output
{"message": "[Google.Acronyms] Spell out 'TEE', if it's unfamiliar to the audience.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 173, "column": 11}}}, "severity": "INFO"}

### Explore Examples

Check warning on line 175 in src/protocol/ai.md

View workflow job for this annotation

GitHub Actions / vale

[vale] src/protocol/ai.md#L175

[Google.Headings] 'Explore Examples' should use sentence-style capitalization.
Raw output
{"message": "[Google.Headings] 'Explore Examples' should use sentence-style capitalization.", "location": {"path": "src/protocol/ai.md", "range": {"start": {"line": 175, "column": 5}}}, "severity": "WARNING"}

- **[AI Frameworks Hello World](https://github.com/iExecBlockchainComputing/ai-frameworks-hello-world)** -
Ready-to-use Docker examples
- **[iExec Discord](https://discord.com/invite/pbt9m98wnU)** - Community support