bedrock
WordPress boilerplate with Composer, easier configuration, and an improved folder structure
Top Related Projects
Composable transformations of Python+NumPy programs: differentiate, vectorize, JIT to GPU/TPU, and more
Tensors and Dynamic neural networks in Python with strong GPU acceleration
An Open Source Machine Learning Framework for Everyone
DeepSpeed is a deep learning optimization library that makes distributed training and inference easy, efficient, and effective.
Distributed training framework for TensorFlow, Keras, PyTorch, and Apache MXNet.
A PyTorch Extension: Tools for easy mixed precision and distributed training in Pytorch
Quick Overview
Bedrock is an open-source, cloud-native workflow orchestration engine developed by Roots. It allows users to define, schedule, and manage complex workflows and data pipelines using a simple YAML configuration. Bedrock is designed to be scalable, flexible, and easy to integrate with various cloud services and data processing tools.
Pros
- Highly scalable and cloud-native architecture
- Simple YAML-based workflow definition
- Supports a wide range of integrations with cloud services and data processing tools
- Provides built-in monitoring and logging capabilities
Cons
- Relatively new project, may have fewer community resources compared to more established alternatives
- Learning curve for users new to workflow orchestration concepts
- Limited documentation for advanced use cases and troubleshooting
Code Examples
- Defining a simple workflow:
name: simple_workflow
version: 1
schedule: "0 0 * * *"
tasks:
- name: task_1
type: shell
command: echo "Hello, Bedrock!"
- name: task_2
type: python
script: |
import time
print("Waiting for 5 seconds...")
time.sleep(5)
print("Done!")
This example defines a simple workflow with two tasks: a shell command and a Python script.
- Using a conditional task:
name: conditional_workflow
version: 1
tasks:
- name: check_condition
type: python
script: |
import random
result = random.choice([True, False])
print(f"Condition result: {result}")
return result
- name: task_if_true
type: shell
command: echo "Condition was true"
condition: "{{ tasks.check_condition.output }}"
- name: task_if_false
type: shell
command: echo "Condition was false"
condition: "{{ not tasks.check_condition.output }}"
This example demonstrates how to use conditional tasks based on the output of a previous task.
- Integrating with AWS S3:
name: s3_workflow
version: 1
tasks:
- name: upload_to_s3
type: aws_s3
operation: upload
source: /path/to/local/file.txt
destination: s3://my-bucket/file.txt
- name: download_from_s3
type: aws_s3
operation: download
source: s3://my-bucket/file.txt
destination: /path/to/local/downloaded_file.txt
This example shows how to integrate with AWS S3 for uploading and downloading files.
Getting Started
To get started with Bedrock:
- Install Bedrock:
pip install bedrock-workflow
-
Create a workflow YAML file (e.g.,
my_workflow.yaml
) with your desired tasks. -
Run the workflow:
bedrock run my_workflow.yaml
For more advanced usage and configuration options, refer to the official Bedrock documentation.
Competitor Comparisons
Composable transformations of Python+NumPy programs: differentiate, vectorize, JIT to GPU/TPU, and more
Pros of JAX
- Highly optimized for numerical computing and machine learning tasks
- Supports automatic differentiation and GPU/TPU acceleration
- Offers a more flexible and extensible framework for research and experimentation
Cons of JAX
- Steeper learning curve, especially for those not familiar with NumPy
- Less comprehensive ecosystem of pre-built models and tools compared to Bedrock
- May require more low-level implementation for some tasks
Code Comparison
JAX example:
import jax.numpy as jnp
from jax import grad, jit
def f(x):
return jnp.sum(jnp.sin(x))
grad_f = jit(grad(f))
Bedrock example:
from bedrock import Model
class MyModel(Model):
def forward(self, x):
return x.sum().sin()
model = MyModel()
The JAX example showcases its focus on numerical computing and automatic differentiation, while the Bedrock example demonstrates its more high-level, model-centric approach. JAX provides more flexibility but requires more explicit coding, whereas Bedrock offers a more streamlined interface for common machine learning tasks.
Tensors and Dynamic neural networks in Python with strong GPU acceleration
Pros of PyTorch
- Widely adopted and supported by a large community
- Extensive documentation and tutorials available
- Offers dynamic computational graphs for flexible model development
Cons of PyTorch
- Steeper learning curve for beginners
- Larger file size and memory footprint
- May have slower inference speed compared to some alternatives
Code Comparison
PyTorch example:
import torch
x = torch.tensor([1, 2, 3])
y = torch.tensor([4, 5, 6])
z = torch.add(x, y)
Bedrock example:
from bedrock import Tensor
x = Tensor([1, 2, 3])
y = Tensor([4, 5, 6])
z = x + y
Key Differences
- PyTorch is a comprehensive deep learning framework, while Bedrock is a lightweight tensor library
- PyTorch offers more advanced features and GPU acceleration, whereas Bedrock focuses on simplicity and ease of use
- PyTorch has a larger ecosystem of tools and libraries, while Bedrock is more suitable for educational purposes and small-scale projects
Use Cases
- PyTorch: Large-scale machine learning projects, research, and production environments
- Bedrock: Learning tensor operations, prototyping simple models, and educational settings
An Open Source Machine Learning Framework for Everyone
Pros of TensorFlow
- Extensive ecosystem with robust tools and libraries for machine learning
- Strong community support and extensive documentation
- Widely adopted in industry and research, with many pre-trained models available
Cons of TensorFlow
- Steeper learning curve compared to Bedrock
- Can be more complex to set up and configure for specific use cases
- Larger codebase and potentially higher resource requirements
Code Comparison
Bedrock (PHP):
$bedrock = new Bedrock\Bedrock();
$bedrock->addRoute('GET', '/', function() {
return 'Hello, World!';
});
$bedrock->run();
TensorFlow (Python):
import tensorflow as tf
model = tf.keras.Sequential([
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam', loss='categorical_crossentropy')
Summary
Bedrock is a lightweight PHP framework focused on simplicity and ease of use, while TensorFlow is a comprehensive machine learning library with a broader scope and more advanced features. Bedrock is better suited for small to medium-sized web applications, whereas TensorFlow excels in complex machine learning tasks and large-scale data processing.
DeepSpeed is a deep learning optimization library that makes distributed training and inference easy, efficient, and effective.
Pros of DeepSpeed
- Highly optimized for large-scale distributed training of deep learning models
- Supports a wide range of AI models and architectures
- Offers advanced features like ZeRO optimizer and pipeline parallelism
Cons of DeepSpeed
- Steeper learning curve due to its complexity and advanced features
- Primarily focused on deep learning, may not be as versatile for other types of applications
- Requires more setup and configuration for optimal performance
Code Comparison
DeepSpeed:
import deepspeed
model_engine, optimizer, _, _ = deepspeed.initialize(args=args,
model=model,
model_parameters=params)
Bedrock:
Bedrock.configure do |config|
config.access_key_id = 'your_access_key'
config.secret_access_key = 'your_secret_key'
end
Summary
DeepSpeed is a powerful library for optimizing large-scale deep learning training, offering advanced features and performance improvements. However, it may be more complex to set up and use compared to Bedrock. Bedrock, on the other hand, appears to be a simpler solution for working with AWS services, with a focus on ease of use and configuration. The choice between the two depends on the specific requirements of your project and the level of optimization needed for deep learning tasks.
Distributed training framework for TensorFlow, Keras, PyTorch, and Apache MXNet.
Pros of Horovod
- Designed specifically for distributed deep learning, offering excellent scalability across multiple GPUs and nodes
- Supports multiple deep learning frameworks (TensorFlow, PyTorch, MXNet)
- Integrates well with popular machine learning libraries and tools
Cons of Horovod
- Steeper learning curve for beginners compared to Bedrock
- Requires more setup and configuration for distributed training
- May be overkill for smaller projects or single-machine setups
Code Comparison
Horovod:
import horovod.tensorflow as hvd
hvd.init()
optimizer = tf.optimizers.Adam(0.001 * hvd.size())
optimizer = hvd.DistributedOptimizer(optimizer)
Bedrock:
from bedrock import Experiment
experiment = Experiment()
model = experiment.create_model()
experiment.train(model)
Key Differences
- Horovod focuses on distributed deep learning, while Bedrock is a more general-purpose machine learning framework
- Horovod requires explicit distributed training setup, whereas Bedrock abstracts away much of the complexity
- Bedrock offers a higher-level API, making it more accessible for beginners and rapid prototyping
- Horovod provides finer control over distributed training parameters and optimizations
A PyTorch Extension: Tools for easy mixed precision and distributed training in Pytorch
Pros of Apex
- Optimized for NVIDIA GPUs, offering significant performance improvements for deep learning tasks
- Provides mixed precision training, enabling faster and more memory-efficient model training
- Includes a variety of CUDA-optimized functions and utilities for advanced deep learning operations
Cons of Apex
- Limited compatibility with non-NVIDIA hardware
- Requires additional setup and configuration compared to more standard PyTorch implementations
- May have a steeper learning curve for users unfamiliar with NVIDIA-specific optimizations
Code Comparison
Apex (mixed precision training):
model, optimizer = amp.initialize(model, optimizer, opt_level="O1")
with amp.scale_loss(loss, optimizer) as scaled_loss:
scaled_loss.backward()
Bedrock (standard PyTorch training):
loss = criterion(output, target)
loss.backward()
optimizer.step()
Summary
Apex excels in performance optimization for NVIDIA GPUs, offering mixed precision training and CUDA-optimized functions. However, it has limited compatibility with non-NVIDIA hardware and requires additional setup. Bedrock, on the other hand, likely provides a more standard PyTorch implementation with broader hardware compatibility but may not offer the same level of performance optimization for NVIDIA GPUs.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
WordPress boilerplate with Composer, easier configuration, and an improved folder structure
Website Documentation Releases Community
Sponsors
Bedrock is an open source project and completely free to use. If you've benefited from our projects and would like to support our future endeavors, please consider sponsoring Roots.
Overview
Bedrock is a WordPress boilerplate for developers that want to manage their projects with Git and Composer. Much of the philosophy behind Bedrock is inspired by the Twelve-Factor App methodology, including the WordPress specific version.
- Better folder structure
- Dependency management with Composer
- Easy WordPress configuration with environment specific files
- Environment variables with Dotenv
- Autoloader for mu-plugins (use regular plugins as mu-plugins)
- Enhanced security (separated web root and secure passwords with wp-password-bcrypt)
Getting Started
See the Bedrock installation documentation.
Stay Connected
- Join us on Discord by sponsoring us on GitHub
- Participate on Roots Discourse
- Follow @rootswp on Twitter
- Read the Roots Blog
- Subscribe to the Roots Newsletter
Top Related Projects
Composable transformations of Python+NumPy programs: differentiate, vectorize, JIT to GPU/TPU, and more
Tensors and Dynamic neural networks in Python with strong GPU acceleration
An Open Source Machine Learning Framework for Everyone
DeepSpeed is a deep learning optimization library that makes distributed training and inference easy, efficient, and effective.
Distributed training framework for TensorFlow, Keras, PyTorch, and Apache MXNet.
A PyTorch Extension: Tools for easy mixed precision and distributed training in Pytorch
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot