# EasyRemote
<div align="center">

[](https://badge.fury.io/py/easyremote)
[](https://opensource.org/licenses/MIT)
[]()
*A lightweight framework for hassle-free remote computing resource sharing.*
English | [δΈζ](https://github.com/Qingbolan/EasyRemote/blob/main/README_zh.md)
</div>
## Why EasyRemote?
Are you tired of:
- Paying expensive cloud GPU fees for AI development?
- Struggling with complex deployment for demos?
- Looking for ways to share computing resources within your team?
EasyRemote lets you expose local computing resources (AI models, data processing functions) as remote services with just a few lines of code. All you need is a cheap VPS!
```python
# It's as simple as this (register):
from easyremote import ComputeNode
# Initialize ComputeNode with VPS address and unique node ID
node = ComputeNode(
vps_address="your-vps-ip:8080",
node_id="basic-compute"
)
@node.register
def run_model(input_data):
return your_ai_model(input_data) # Executes on your local GPU
if __name__ == "__main__":
node.serve()
```
## Features
- π **Super Simple**: Turn any function into a remote service with a single decorator
- π° **Cost-Effective**: Use your local GPU through an inexpensive VPS
- π **Private & Secure**: All computation stays on your local machine
- π **Flexible Deployment**: Perfect for demos, prototypes, and team collaboration
## Quick Start
### 1. Installation
```bash
pip install easyremote
```
### 2. Set Up VPS (Gateway&&Call)
```python
from easyremote import Server
app = FastAPI()
server = Server(port=8080)
@remote(node_id="basic-compute")
def add(a: int, b: int) -> int:
pass
```
### 3. Configure Local Node
```python
from easyremote import ComputeNode
# Connect to your VPS
node = ComputeNode("your-vps-ip:8080")
# Define your remote functions
@node.register
def process_data(data):
return heavy_computation(data) # Runs locally
# Start serving
node.serve()
```
## Advanced Usage
### Async Support
```python
@node.register(async_func=True)
async def async_process(data):
result = await complex_async_operation(data)
return result
```
### Streaming Results
```python
@node.register(stream=True)
def stream_results(data):
for chunk in process_large_dataset(data):
yield chunk
```
### Real-world Examples
Check out our [examples](./examples/) directory for:
- AI Model Serving
- Data Pipeline Processing
- Team Resource Sharing
- And more!
## Architecture
```
Client -> VPS (Gateway) -> Local Compute Node
-> Local Compute Node
-> Local Compute Node
```
## Performance
- Efficient binary protocol
- Support for large data transfer
- Automatic connection management
## Roadmap
- [ ] Rewrite Distributed Network Using Go's Kitex Framework
- [ ] Multi-node clustering support
- [ ] Enhanced security features
- [ ] Web-based management UI
- [ ] More language SDKs
- [ ] Docker support
## Contributing
We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md)
## License
[MIT License](LICENSE)
## Contact & Support
- Author: Silan Hu
- Email: silan.hu@u.nus.edu
- GitHub: [Qingbolan](https://github.com/Qingbolan)
## Acknowledgments
Special thanks to all contributors who have helped make EasyRemote better!
---
<div align="center">
*If you find EasyRemote useful, please consider giving it a star β*
</div>
Raw data
{
"_id": null,
"home_page": null,
"name": "easyremote",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": "Silan Hu <silan.hu@u.nus.edu>",
"keywords": "remote-computing, distributed-computing, gpu-sharing, cloud-computing, grpc, asyncio",
"author": "Silan Hu",
"author_email": "Silan Hu <silan.hu@u.nus.edu>",
"download_url": "https://files.pythonhosted.org/packages/1a/71/28788aa812e0e378889280664155593cd3141c26e0cd2c54eaa29d40c323/easyremote-0.1.3.1.tar.gz",
"platform": null,
"description": "# EasyRemote\r\n\r\n<div align=\"center\">\r\n\r\n\r\n\r\n[](https://badge.fury.io/py/easyremote)\r\n[](https://opensource.org/licenses/MIT)\r\n[]()\r\n\r\n*A lightweight framework for hassle-free remote computing resource sharing.*\r\n\r\nEnglish | [\u4e2d\u6587](https://github.com/Qingbolan/EasyRemote/blob/main/README_zh.md)\r\n\r\n</div>\r\n\r\n## Why EasyRemote?\r\n\r\nAre you tired of:\r\n\r\n- Paying expensive cloud GPU fees for AI development?\r\n- Struggling with complex deployment for demos?\r\n- Looking for ways to share computing resources within your team?\r\n\r\nEasyRemote lets you expose local computing resources (AI models, data processing functions) as remote services with just a few lines of code. All you need is a cheap VPS!\r\n\r\n```python\r\n# It's as simple as this (register):\r\nfrom easyremote import ComputeNode\r\n\r\n# Initialize ComputeNode with VPS address and unique node ID\r\nnode = ComputeNode(\r\n vps_address=\"your-vps-ip:8080\",\r\n node_id=\"basic-compute\"\r\n)\r\n\r\n@node.register\r\ndef run_model(input_data):\r\n return your_ai_model(input_data) # Executes on your local GPU\r\n\r\nif __name__ == \"__main__\":\r\n node.serve()\r\n```\r\n\r\n## Features\r\n\r\n- \ud83d\ude80 **Super Simple**: Turn any function into a remote service with a single decorator\r\n- \ud83d\udcb0 **Cost-Effective**: Use your local GPU through an inexpensive VPS\r\n- \ud83d\udd12 **Private & Secure**: All computation stays on your local machine\r\n- \ud83c\udf10 **Flexible Deployment**: Perfect for demos, prototypes, and team collaboration\r\n\r\n## Quick Start\r\n\r\n### 1. Installation\r\n\r\n```bash\r\npip install easyremote\r\n```\r\n\r\n### 2. Set Up VPS (Gateway&&Call)\r\n\r\n```python\r\nfrom easyremote import Server\r\n\r\napp = FastAPI()\r\nserver = Server(port=8080)\r\n\r\n@remote(node_id=\"basic-compute\")\r\ndef add(a: int, b: int) -> int:\r\n pass\r\n```\r\n\r\n### 3. Configure Local Node\r\n\r\n```python\r\nfrom easyremote import ComputeNode\r\n\r\n# Connect to your VPS\r\nnode = ComputeNode(\"your-vps-ip:8080\")\r\n\r\n# Define your remote functions\r\n@node.register\r\ndef process_data(data):\r\n return heavy_computation(data) # Runs locally\r\n\r\n# Start serving\r\nnode.serve()\r\n```\r\n\r\n## Advanced Usage\r\n\r\n### Async Support\r\n\r\n```python\r\n@node.register(async_func=True)\r\nasync def async_process(data):\r\n result = await complex_async_operation(data)\r\n return result\r\n```\r\n\r\n### Streaming Results\r\n\r\n```python\r\n@node.register(stream=True)\r\ndef stream_results(data):\r\n for chunk in process_large_dataset(data):\r\n yield chunk\r\n```\r\n\r\n### Real-world Examples\r\n\r\nCheck out our [examples](./examples/) directory for:\r\n\r\n- AI Model Serving\r\n- Data Pipeline Processing\r\n- Team Resource Sharing\r\n- And more!\r\n\r\n## Architecture\r\n\r\n```\r\nClient -> VPS (Gateway) -> Local Compute Node\r\n -> Local Compute Node\r\n -> Local Compute Node\r\n```\r\n\r\n## Performance\r\n\r\n- Efficient binary protocol\r\n- Support for large data transfer\r\n- Automatic connection management\r\n\r\n## Roadmap\r\n\r\n- [ ] Rewrite Distributed Network Using Go's Kitex Framework\r\n- [ ] Multi-node clustering support\r\n- [ ] Enhanced security features\r\n- [ ] Web-based management UI\r\n- [ ] More language SDKs\r\n- [ ] Docker support\r\n\r\n## Contributing\r\n\r\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md)\r\n\r\n## License\r\n\r\n[MIT License](LICENSE)\r\n\r\n## Contact & Support\r\n\r\n- Author: Silan Hu\r\n- Email: silan.hu@u.nus.edu\r\n- GitHub: [Qingbolan](https://github.com/Qingbolan)\r\n\r\n## Acknowledgments\r\n\r\nSpecial thanks to all contributors who have helped make EasyRemote better!\r\n\r\n---\r\n\r\n<div align=\"center\">\r\n*If you find EasyRemote useful, please consider giving it a star \u2b50*\r\n\r\n</div>\r\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A lightweight framework for hassle-free remote computing resource sharing",
"version": "0.1.3.1",
"project_urls": {
"Bug Tracker": "https://github.com/Qingbolan/EasyRemote/issues",
"Changelog": "https://github.com/Qingbolan/EasyRemote/releases",
"Documentation": "https://github.com/Qingbolan/EasyRemote/blob/main/README.md",
"Homepage": "https://github.com/Qingbolan/EasyRemote",
"Repository": "https://github.com/Qingbolan/EasyRemote.git",
"Source Code": "https://github.com/Qingbolan/EasyRemote"
},
"split_keywords": [
"remote-computing",
" distributed-computing",
" gpu-sharing",
" cloud-computing",
" grpc",
" asyncio"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "54767b500dda72ed0a03358811cf4c5b4fa84528370555b20b794992c00fea32",
"md5": "c9138dc4917d013e48cd0baba695dd5f",
"sha256": "97b141f7f676f0b85e8715cd1aae5282b73cc15b4014d74d061cc33ed32bfee6"
},
"downloads": -1,
"filename": "easyremote-0.1.3.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "c9138dc4917d013e48cd0baba695dd5f",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 44574,
"upload_time": "2025-05-24T07:03:11",
"upload_time_iso_8601": "2025-05-24T07:03:11.375777Z",
"url": "https://files.pythonhosted.org/packages/54/76/7b500dda72ed0a03358811cf4c5b4fa84528370555b20b794992c00fea32/easyremote-0.1.3.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1a7128788aa812e0e378889280664155593cd3141c26e0cd2c54eaa29d40c323",
"md5": "6ad1349c9c46f30aef90c22bacfa1783",
"sha256": "275502449ff35d814b74b05a72e5ccc24c511bb18bc6306082eda4509a51a9a9"
},
"downloads": -1,
"filename": "easyremote-0.1.3.1.tar.gz",
"has_sig": false,
"md5_digest": "6ad1349c9c46f30aef90c22bacfa1783",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 59500,
"upload_time": "2025-05-24T07:03:13",
"upload_time_iso_8601": "2025-05-24T07:03:13.012912Z",
"url": "https://files.pythonhosted.org/packages/1a/71/28788aa812e0e378889280664155593cd3141c26e0cd2c54eaa29d40c323/easyremote-0.1.3.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-05-24 07:03:13",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Qingbolan",
"github_project": "EasyRemote",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [
{
"name": "grpcio-tools",
"specs": []
}
],
"lcname": "easyremote"
}