diff --git a/.gitattributes b/.gitattributes index dab9a4e17afd2ef39d90ccb0b40ef2786fe77422..ac9c2bb198e850d645f433c3b3b6189c7ea17491 100644 --- a/.gitattributes +++ b/.gitattributes @@ -33,3 +33,157 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text *.zip filter=lfs diff=lfs merge=lfs -text *.zst filter=lfs diff=lfs merge=lfs -text *tfevents* filter=lfs diff=lfs merge=lfs -text +sample_task/0001.png filter=lfs diff=lfs merge=lfs -text +sample_task/0002.png filter=lfs diff=lfs merge=lfs -text +sample_task/0003.png filter=lfs diff=lfs merge=lfs -text +sample_task/0004.png filter=lfs diff=lfs merge=lfs -text +sample_task/0005.png filter=lfs diff=lfs merge=lfs -text +sample_task/0006.png filter=lfs diff=lfs merge=lfs -text +sample_task/0007.png filter=lfs diff=lfs merge=lfs -text +sample_task/0008.png filter=lfs diff=lfs merge=lfs -text +sample_task/0009.png filter=lfs diff=lfs merge=lfs -text +sample_task/0010.png filter=lfs diff=lfs merge=lfs -text +sample_task/0011.png filter=lfs diff=lfs merge=lfs -text +sample_task/0012.png filter=lfs diff=lfs merge=lfs -text +sample_task/0013.png filter=lfs diff=lfs merge=lfs -text +sample_task/0014.png filter=lfs diff=lfs merge=lfs -text +sample_task/0015.png filter=lfs diff=lfs merge=lfs -text +sample_task/0016.png filter=lfs diff=lfs merge=lfs -text +sample_task/0017.png filter=lfs diff=lfs merge=lfs -text +sample_task/0018.png filter=lfs diff=lfs merge=lfs -text +sample_task/0019.png filter=lfs diff=lfs merge=lfs -text +sample_task/0020.png filter=lfs diff=lfs merge=lfs -text +sample_task/0021.png filter=lfs diff=lfs merge=lfs -text +sample_task/0022.png filter=lfs diff=lfs merge=lfs -text +sample_task/0023.png filter=lfs diff=lfs merge=lfs -text +sample_task/0024.png filter=lfs diff=lfs merge=lfs -text +sample_task/0025.png filter=lfs diff=lfs merge=lfs -text +sample_task/0026.png filter=lfs diff=lfs merge=lfs -text +sample_task/0027.png filter=lfs diff=lfs merge=lfs -text +sample_task/0028.png filter=lfs diff=lfs merge=lfs -text +sample_task/0029.png filter=lfs diff=lfs merge=lfs -text +sample_task/0030.png filter=lfs diff=lfs merge=lfs -text +sample_task/0031.png filter=lfs diff=lfs merge=lfs -text +sample_task/0032.png filter=lfs diff=lfs merge=lfs -text +sample_task/0033.png filter=lfs diff=lfs merge=lfs -text +sample_task/0034.png filter=lfs diff=lfs merge=lfs -text +sample_task/0035.png filter=lfs diff=lfs merge=lfs -text +sample_task/0036.png filter=lfs diff=lfs merge=lfs -text +sample_task/0037.png filter=lfs diff=lfs merge=lfs -text +sample_task/0038.png filter=lfs diff=lfs merge=lfs -text +sample_task/0039.png filter=lfs diff=lfs merge=lfs -text +sample_task/0043.png filter=lfs diff=lfs merge=lfs -text +sample_task/0044.png filter=lfs diff=lfs merge=lfs -text +sample_task/0045.png filter=lfs diff=lfs merge=lfs -text +sample_task/0046.png filter=lfs diff=lfs merge=lfs -text +sample_task/0047.png filter=lfs diff=lfs merge=lfs -text +sample_task/0048.png filter=lfs diff=lfs merge=lfs -text +sample_task/0049.png filter=lfs diff=lfs merge=lfs -text +sample_task/0050.png filter=lfs diff=lfs merge=lfs -text +sample_task/0051.png filter=lfs diff=lfs merge=lfs -text +sample_task/0052.png filter=lfs diff=lfs merge=lfs -text +sample_task/0053.png filter=lfs diff=lfs merge=lfs -text +sample_task/0054.png filter=lfs diff=lfs merge=lfs -text +sample_task/0055.png filter=lfs diff=lfs merge=lfs -text +sample_task/0056.png filter=lfs diff=lfs merge=lfs -text +sample_task/0057.png filter=lfs diff=lfs merge=lfs -text +sample_task/0059.png filter=lfs diff=lfs merge=lfs -text +sample_task/0060.png filter=lfs diff=lfs merge=lfs -text +sample_task/0061.png filter=lfs diff=lfs merge=lfs -text +sample_task/0062.png filter=lfs diff=lfs merge=lfs -text +sample_task/0063.png filter=lfs diff=lfs merge=lfs -text +sample_task/0064.png filter=lfs diff=lfs merge=lfs -text +sample_task/0065.png filter=lfs diff=lfs merge=lfs -text +sample_task/0066.png filter=lfs diff=lfs merge=lfs -text +sample_task/0067.png filter=lfs diff=lfs merge=lfs -text +sample_task/0068.png filter=lfs diff=lfs merge=lfs -text +sample_task/0069.png filter=lfs diff=lfs merge=lfs -text +sample_task/0070.png filter=lfs diff=lfs merge=lfs -text +sample_task/0072.png filter=lfs diff=lfs merge=lfs -text +sample_task/0073.png filter=lfs diff=lfs merge=lfs -text +sample_task/0074.png filter=lfs diff=lfs merge=lfs -text +sample_task/0075.png filter=lfs diff=lfs merge=lfs -text +sample_task/0076.png filter=lfs diff=lfs merge=lfs -text +sample_task/0077.png filter=lfs diff=lfs merge=lfs -text +sample_task/0078.png filter=lfs diff=lfs merge=lfs -text +sample_task/0079.png filter=lfs diff=lfs merge=lfs -text +sample_task/0080.png filter=lfs diff=lfs merge=lfs -text +sample_task/0081.png filter=lfs diff=lfs merge=lfs -text +sample_task/0082.png filter=lfs diff=lfs merge=lfs -text +sample_task/0083.png filter=lfs diff=lfs merge=lfs -text +sample_task/0084.png filter=lfs diff=lfs merge=lfs -text +sample_task/0085.png filter=lfs diff=lfs merge=lfs -text +sample_task/0086.png filter=lfs diff=lfs merge=lfs -text +sample_task/0087.png filter=lfs diff=lfs merge=lfs -text +sample_task/0088.png filter=lfs diff=lfs merge=lfs -text +sample_task/0089.png filter=lfs diff=lfs merge=lfs -text +sample_task/0090.png filter=lfs diff=lfs merge=lfs -text +sample_task/0091.png filter=lfs diff=lfs merge=lfs -text +sample_task/0092.png filter=lfs diff=lfs merge=lfs -text +sample_task/0093.png filter=lfs diff=lfs merge=lfs -text +sample_task/0094.png filter=lfs diff=lfs merge=lfs -text +sample_task/0095.png filter=lfs diff=lfs merge=lfs -text +sample_task/0096.png filter=lfs diff=lfs merge=lfs -text +sample_task/0097.png filter=lfs diff=lfs merge=lfs -text +sample_task/0098.png filter=lfs diff=lfs merge=lfs -text +sample_task/0099.png filter=lfs diff=lfs merge=lfs -text +sample_task/0100.png filter=lfs diff=lfs merge=lfs -text +sample_task/0101.png filter=lfs diff=lfs merge=lfs -text +sample_task/0102.png filter=lfs diff=lfs merge=lfs -text +sample_task/0103.png filter=lfs diff=lfs merge=lfs -text +sample_task/0104.png filter=lfs diff=lfs merge=lfs -text +sample_task/0105.png filter=lfs diff=lfs merge=lfs -text +sample_task/0107.png filter=lfs diff=lfs merge=lfs -text +sample_task/0108.png filter=lfs diff=lfs merge=lfs -text +sample_task/0109.png filter=lfs diff=lfs merge=lfs -text +sample_task/0110.png filter=lfs diff=lfs merge=lfs -text +sample_task/0111.png filter=lfs diff=lfs merge=lfs -text +sample_task/0112.png filter=lfs diff=lfs merge=lfs -text +sample_task/0113.png filter=lfs diff=lfs merge=lfs -text +sample_task/0114.png filter=lfs diff=lfs merge=lfs -text +sample_task/0115.png filter=lfs diff=lfs merge=lfs -text +sample_task/0116.png filter=lfs diff=lfs merge=lfs -text +sample_task/0117.png filter=lfs diff=lfs merge=lfs -text +sample_task/0118.png filter=lfs diff=lfs merge=lfs -text +sample_task/0119.png filter=lfs diff=lfs merge=lfs -text +sample_task/0120.png filter=lfs diff=lfs merge=lfs -text +sample_task/0121.png filter=lfs diff=lfs merge=lfs -text +sample_task/0122.png filter=lfs diff=lfs merge=lfs -text +sample_task/0123.png filter=lfs diff=lfs merge=lfs -text +sample_task/0124.png filter=lfs diff=lfs merge=lfs -text +sample_task/0125.png filter=lfs diff=lfs merge=lfs -text +sample_task/0126.png filter=lfs diff=lfs merge=lfs -text +sample_task/0127.png filter=lfs diff=lfs merge=lfs -text +sample_task/0128.png filter=lfs diff=lfs merge=lfs -text +sample_task/0129.png filter=lfs diff=lfs merge=lfs -text +sample_task/0130.png filter=lfs diff=lfs merge=lfs -text +sample_task/0131.png filter=lfs diff=lfs merge=lfs -text +sample_task/0132.png filter=lfs diff=lfs merge=lfs -text +sample_task/0133.png filter=lfs diff=lfs merge=lfs -text +sample_task/0134.png filter=lfs diff=lfs merge=lfs -text +sample_task/0135.png filter=lfs diff=lfs merge=lfs -text +sample_task/0136.png filter=lfs diff=lfs merge=lfs -text +sample_task/0137.png filter=lfs diff=lfs merge=lfs -text +sample_task/0138.png filter=lfs diff=lfs merge=lfs -text +sample_task/0139.png filter=lfs diff=lfs merge=lfs -text +sample_task/0140.png filter=lfs diff=lfs merge=lfs -text +sample_task/0141.png filter=lfs diff=lfs merge=lfs -text +sample_task/0142.png filter=lfs diff=lfs merge=lfs -text +sample_task/0143.png filter=lfs diff=lfs merge=lfs -text +sample_task/0144.png filter=lfs diff=lfs merge=lfs -text +sample_task/0145.png filter=lfs diff=lfs merge=lfs -text +sample_task/0146.png filter=lfs diff=lfs merge=lfs -text +sample_task/0147.png filter=lfs diff=lfs merge=lfs -text +sample_task/0148.png filter=lfs diff=lfs merge=lfs -text +sample_task/0149.png filter=lfs diff=lfs merge=lfs -text +sample_task/0150.png filter=lfs diff=lfs merge=lfs -text +sample_task/0151.png filter=lfs diff=lfs merge=lfs -text +sample_task/0152.png filter=lfs diff=lfs merge=lfs -text +sample_task/0153.png filter=lfs diff=lfs merge=lfs -text +sample_task/0154.png filter=lfs diff=lfs merge=lfs -text +sample_task/0155.png filter=lfs diff=lfs merge=lfs -text +sample_task/0156.png filter=lfs diff=lfs merge=lfs -text +sample_task/0157.png filter=lfs diff=lfs merge=lfs -text +sample_task/0158.png filter=lfs diff=lfs merge=lfs -text +sample_task/0159.png filter=lfs diff=lfs merge=lfs -text +sample_task/0160.png filter=lfs diff=lfs merge=lfs -text diff --git a/ai_http.py b/ai_http.py index 7a68d91d10c676e22e70ca226b18d77a32103ad0..b1ae8e8a9f40112c5e93a756017845920d34d4c1 100644 --- a/ai_http.py +++ b/ai_http.py @@ -1,5 +1,6 @@ import numpy as np import time +import torch from typing import Dict, Any, Optional, Tuple, Union, List from enum import Enum from tensor_core import TensorCoreArray @@ -96,27 +97,56 @@ class AIAccelerator: return False return model_id in self.model_registry and self.storage.is_model_loaded(model_id) - def load_model(self, model_id: str, model: Dict[str, Any], processor: Any = None) -> bool: - """Load a model into the accelerator""" + def load_model(self, model_id: str, model: Dict[str, Any], + processor: Any = None, model_config: Dict[str, Any] = None) -> bool: + """Load a model into the virtual GPU accelerator + + Args: + model_id: Unique identifier for the model + model: Model dictionary containing layer weights and architecture + processor: Optional preprocessing/postprocessing functions + model_config: Optional model configuration + """ try: if not self.storage: raise RuntimeError("No storage available") - # Store model in local storage - if not self.storage.load_model(model_id, model_data=model): - raise RuntimeError("Failed to store model in local storage") + # Extract and store model weights in virtual VRAM + weights = {} + for layer_name, layer_data in model.get("layers", {}).items(): + # Store weights and biases in virtual VRAM + weight_id = f"{model_id}/{layer_name}/weight" + if not self.storage.store_tensor(weight_id, layer_data["weight"]): + raise RuntimeError(f"Failed to store weights for layer {layer_name}") + weights[layer_name] = {"weight": weight_id} - # Update model registry and resource monitor + # Store bias if present + if "bias" in layer_data: + bias_id = f"{model_id}/{layer_name}/bias" + if not self.storage.store_tensor(bias_id, layer_data["bias"]): + raise RuntimeError(f"Failed to store bias for layer {layer_name}") + weights[layer_name]["bias"] = bias_id + + # Update model registry with weight references and config self.model_registry[model_id] = { - 'config': model, + 'weights': weights, + 'config': model_config or {}, + 'architecture': model.get("architecture", {}), 'loaded_at': time.time(), 'processor': processor } + # Pre-allocate VRAM if using size limits + if hasattr(self.vram, 'pre_allocate_vram'): + total_size = sum( + np.prod(layer["weight"].shape) * 4 # Assuming float32 + for layer in model.get("layers", {}).values() + ) + if not self.vram.pre_allocate_vram(total_size): + raise RuntimeError("Insufficient VRAM for model weights") + # Update resource monitoring self.resource_monitor['loaded_models'].add(model_id) - - # Update storage monitoring if available if hasattr(self.storage, 'resource_monitor'): self.storage.resource_monitor['loaded_models'].add(model_id) @@ -126,16 +156,16 @@ class AIAccelerator: print(f"Error loading model {model_id}: {str(e)}") return False - # Model registries - self.model_registry: Dict[str, Any] = {} - self.tokenizer_registry: Dict[str, Any] = {} - self.model_configs: Dict[str, Any] = {} # Store model architectures - self.model_loaded = False + # # Model registries + # self.model_registry: Dict[str, Any] = {} + # self.tokenizer_registry: Dict[str, Any] = {} + # self.model_configs: Dict[str, Any] = {} # Store model architectures + # self.model_loaded = False - # Batch processing configuration - self.max_batch_size = 64 - self.min_batch_size = 4 - self.dynamic_batching = True # Enable automatic batch size adjustment + # # Batch processing configuration + # self.max_batch_size = 64 + # self.min_batch_size = 4 + # self.dynamic_batching = True # Enable automatic batch size adjustment def _serialize_model_config(self, config: Any) -> dict: """Convert model config to a serializable format.""" @@ -511,22 +541,56 @@ class AIAccelerator: return False def inference(self, model_id: str, input_tensor_id: str) -> Optional[np.ndarray]: - """Run inference using HTTP storage""" + """Run PyTorch model inference using virtual GPU acceleration""" try: - # Load input tensor + # Load input tensor from storage input_data = self.storage.load_tensor(input_tensor_id) if input_data is None: print(f"Could not load input tensor {input_tensor_id}") return None - # Run inference via HTTP API - result = self.storage.start_inference(model_id, input_data) + # Convert to PyTorch tensor and move to vGPU + from torch_vgpu import to_vgpu + input_tensor = to_vgpu(torch.from_numpy(input_data), vram=self.vram) - if result and result.get('output') is not None: - return result['output'] - else: - print(f"Inference failed for model {model_id}") + # Get model from registry + if not self.has_model(model_id): + print(f"Model {model_id} not loaded") + return None + + model_info = self.model_registry[model_id] + model = model_info.get("model") + if not isinstance(model, torch.nn.Module): + print(f"Invalid model type for {model_id}") return None + + # Move model to vGPU device + model = model.to(input_tensor.device) + model.eval() + + # Run inference + with torch.no_grad(): + # Apply any preprocessing from model config + if "preprocess" in model_info: + input_tensor = model_info["preprocess"](input_tensor) + + # Forward pass through model on vGPU + output = model(input_tensor) + + # Apply any postprocessing from model config + if "postprocess" in model_info: + output = model_info["postprocess"](output) + + # Convert output to numpy and store in VRAM + output_np = output.cpu().numpy() + output_id = f"{model_id}_output_{time.time()}" + self.storage.store_tensor(output_id, output_np) + + # Track compute statistics + self.total_compute_time += time.time() + self.operations_performed += 1 + + return output_np except Exception as e: print(f"Error during inference: {str(e)}") diff --git a/http_storage.py b/http_storage.py index b93e964bfb89e2707f1719c406a17ff5f8fcf177..240722dbe51dbec47b7ba5e2f16287c2bcd9a897 100644 --- a/http_storage.py +++ b/http_storage.py @@ -46,10 +46,34 @@ class LocalStorage: for path in [self.vram_path, self.models_path, self.cache_path, self.state_path]: path.mkdir(parents=True, exist_ok=True) + # Basic state management self.lock = threading.Lock() self._closing = False self._connected = True + # Resource monitoring + self.resource_monitor = { + 'vram_used': 0, + 'active_tensors': 0, + 'loaded_models': set(), + 'last_updated': time.time() + } + + # Storage statistics + self.stats = { + 'total_size': 0, + 'available_size': float('inf'), + 'model_count': 0, + 'tensor_count': 0 + } + + # Initialize registries + self.model_registry = {} + self.tensor_registry = {} + + self.initialized = True + self._connected = True + # Initialize monitoring self.resource_monitor = { 'vram_used': 0, @@ -115,31 +139,25 @@ class LocalStorage: The actual initialization happens in __new__ and _init_singleton""" pass - def _create_session(self): - """Initialize local storage session""" + def _check_storage_ready(self) -> bool: + """Check if local storage is ready for use""" try: - # Create status file to track session - status_path = self.base_path / "session_status.json" - status_data = { - "session_id": self.session_id, - "created_at": time.time(), - "resource_limits": { - "max_vram_gb": 40, # A100 size - "max_models": 5, - "max_batch_size": 32 - } - } - - with open(status_path, 'w') as f: - json.dump(status_data, f, indent=2) + # Verify all required directories exist and are accessible + for path in [self.vram_path, self.models_path, self.cache_path, self.state_path]: + if not path.exists() or not os.access(str(path), os.R_OK | os.W_OK): + return False + + # Update storage statistics + self.stats.update({ + 'total_size': sum(f.stat().st_size for f in self.base_path.rglob('*') if f.is_file()), + 'model_count': len(list(self.models_path.glob('*'))), + 'tensor_count': len(list(self.vram_path.glob('*.npy'))) + }) - logging.info(f"Local storage session created: {self.session_id}") return True except Exception as e: - logging.error(f"Failed to create HTTP session: {e}") - self.error_count += 1 - self.last_error_time = time.time() + logging.error(f"Storage check failed: {e}") return False def _check_storage(self) -> Dict[str, Any]: @@ -359,15 +377,9 @@ class LocalStorage: def ping(self) -> bool: """Check if local storage is accessible""" - try: - # Check if all storage directories exist and are accessible - for path in [self.vram_path, self.models_path, self.cache_path, self.state_path]: - if not path.exists() or not os.access(str(path), os.R_OK | os.W_OK): - return False - return True - except Exception as e: - logging.error(f"Storage check failed: {e}") + if self._closing: return False + return self._check_storage_ready() # Compatibility aliases for existing code HTTPGPUStorage = LocalStorage WebSocketGPUStorage = LocalStorage diff --git a/model_inference_flow.txt b/model_inference_flow.txt new file mode 100644 index 0000000000000000000000000000000000000000..b6bbbf0f7d93dc01b1cdb27fa4afea4e725c67c3 --- /dev/null +++ b/model_inference_flow.txt @@ -0,0 +1,95 @@ +Model Inference Flow on Virtual GPU +================================ + +1. Storage and VRAM Setup +------------------------- +[HTTPGPUStorage] + │ ╲ + │ ╲ Zero-Copy + │ ╲ Memory Mapping + ▼ ▼ +[Local Storage]──>[Virtual VRAM] + (Memory Pages) (Page Tables) + │ │ + └──────────────┐ │ + ▼ ▼ + [vGPU Device] + │ + ▼ +2. Model Loading and Device Movement +---------------------------------- +[Florence-2-Large] ---load---> [PyTorch Model] + │ │ + │ ▼ + │ [to_vgpu() conversion] + │ │ + └─────────────────┐ │ + ▼ ▼ + [Model on vGPU Device] + │ + ▼ +3. Input Processing and Inference +-------------------------------- +[Input Text] -----> [Tokenizer] -----> [Tensor] + │ + ▼ + [to_vgpu() conversion] + │ + ▼ + [Tensor on vGPU] + │ + ▼ +4. Model Inference Flow +---------------------- +[Model Forward Pass] + │ + ▼ +[vGPU Computation] + │ + ▼ +[PyTorch Output Tensor] + │ + ▼ +[Last Hidden State] +(Shape: [batch_size, seq_length, hidden_size]) + +Data Flow and Memory Management: +----------------------------- +1. Storage Layer: + - HTTPGPUStorage ──> Local Storage (Memory Pages) + - Local Storage ──> Virtual VRAM (Zero-Copy) + - Virtual VRAM manages page tables pointing to local storage + +2. Memory Architecture: + - Local Storage: Physical memory pages + - Virtual VRAM: Page tables and memory mappings + - Zero-copy between Local Storage and VRAM + - Direct memory access for GPU operations + +3. Processing Flow: + - Model Layer: HF Model ──> PyTorch ──> vGPU + - Input Layer: Text ──> Tokens ──> Tensor ──> vGPU + - Output Layer: vGPU ──> PyTorch Tensor ──> Results + +Key Components: +-------------- +- HTTP Storage: HTTPGPUStorage (Network interface) +- Local Store: Memory pages (Physical storage) +- Virtual VRAM: Page tables (Memory management) +- Device: vGPU (Computation) +- Model: Florence-2-Large (transformer) +- Framework: PyTorch (ML operations) +- Interface: to_vgpu() (Zero-copy transfer) + +Memory Management Details: +------------------------ +1. Local Storage: + - Manages physical memory pages + - Direct mapping to virtual VRAM + - Zero-copy access for GPU ops + +2. Virtual VRAM: + - Page table management + - Memory mapping to local storage + - No physical copying of data + - Direct GPU access to memory diff --git a/sample_task/0001.png b/sample_task/0001.png new file mode 100644 index 0000000000000000000000000000000000000000..9363ff3398d9f2af11464eef65310d9759a7d147 --- /dev/null +++ b/sample_task/0001.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f8b4514201fbce5e290b67267cea72866fb772cf811b19657bdd6791105630b +size 715836 diff --git a/sample_task/0002.png b/sample_task/0002.png new file mode 100644 index 0000000000000000000000000000000000000000..7d3442d8ff4e5315e794cd01285eef7f006323bb --- /dev/null +++ b/sample_task/0002.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f320f8cb10de8ef31407115f7b83fe402516d6afe5bb9d9f4a19570db8db7f7 +size 728304 diff --git a/sample_task/0003.png b/sample_task/0003.png new file mode 100644 index 0000000000000000000000000000000000000000..5452289ef976b3600a08e7a664e54c15244d1b64 --- /dev/null +++ b/sample_task/0003.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2750284d112a8d21c49c4728689ebf0fc95bad6eb797988750bfb363a9e6c20e +size 735860 diff --git a/sample_task/0004.png b/sample_task/0004.png new file mode 100644 index 0000000000000000000000000000000000000000..865809de11cd836f11d1e7b71bd717583d5b8d4b --- /dev/null +++ b/sample_task/0004.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5dbe182fcde6076692d5463cb797209ef3f0a67e7a8573f5692226e099b036c1 +size 746424 diff --git a/sample_task/0005.png b/sample_task/0005.png new file mode 100644 index 0000000000000000000000000000000000000000..fd6fe244a1221a92d9c4ba5187c22bec8459bf55 --- /dev/null +++ b/sample_task/0005.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc88018fd76c6df064b49c7f4fdd192f97d6d2c39f6061ff08882c8a0bbba902 +size 158976 diff --git a/sample_task/0006.png b/sample_task/0006.png new file mode 100644 index 0000000000000000000000000000000000000000..aa052ac1221bebe5b95cbedeed847bd5c50db183 --- /dev/null +++ b/sample_task/0006.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:90e8b8f358cca977d080447728d464d9568ebad49c630c0158f5a8b4c7ac518e +size 210274 diff --git a/sample_task/0007.png b/sample_task/0007.png new file mode 100644 index 0000000000000000000000000000000000000000..d5336bb0ea06f8f0543ba01de35fee595e8e9c70 --- /dev/null +++ b/sample_task/0007.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04ec3ab3412fb54e294fb81b439226d5030c49a11cdfbf5216d4d5d5f80fb751 +size 248902 diff --git a/sample_task/0008.png b/sample_task/0008.png new file mode 100644 index 0000000000000000000000000000000000000000..d6a708467c470624e694a42f01fee7d5a27b8291 --- /dev/null +++ b/sample_task/0008.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8bfd8df699b2da0476e4a97f69d21e6c986c3aefa5634e5e77e262dc16f35080 +size 100249 diff --git a/sample_task/0009.png b/sample_task/0009.png new file mode 100644 index 0000000000000000000000000000000000000000..c3b730d9eddc68a1c446246c8ada90346ad46e64 --- /dev/null +++ b/sample_task/0009.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f621bf8a22395a5361642fe1b0cc314904055f8a6d92ba8fe0367900d60f533 +size 221735 diff --git a/sample_task/0010.png b/sample_task/0010.png new file mode 100644 index 0000000000000000000000000000000000000000..3e6a160bd014b01e82149d15233a24e31d77082a --- /dev/null +++ b/sample_task/0010.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e4a3337e1b5b99dec71e83370af1acdf035b66713e900462ee39c27a0054b89 +size 247796 diff --git a/sample_task/0011.png b/sample_task/0011.png new file mode 100644 index 0000000000000000000000000000000000000000..5a2d1168e2256c959f14cc14197934bacea17a91 --- /dev/null +++ b/sample_task/0011.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a896dc9d9bcfc64bbf508b0fa944751af9ca6b76dc5447275b9d5e27404dbedf +size 747870 diff --git a/sample_task/0012.png b/sample_task/0012.png new file mode 100644 index 0000000000000000000000000000000000000000..945933c15d53562108a7a9ecbb933ff3ec1fa54f --- /dev/null +++ b/sample_task/0012.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b845d65032bb45b22d8fd15c3b41799453b258cc4e41623f401fec60cedd12b +size 749460 diff --git a/sample_task/0013.png b/sample_task/0013.png new file mode 100644 index 0000000000000000000000000000000000000000..35542e3d7d95dae02dab854432b93eafaf578a16 --- /dev/null +++ b/sample_task/0013.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a9c3100e756b01995d94a7593de338ad098e7d4f572d1293867bb7ec9a22ceff +size 746741 diff --git a/sample_task/0014.png b/sample_task/0014.png new file mode 100644 index 0000000000000000000000000000000000000000..21450a4594129f81717b03951b36502f5ffeee2f --- /dev/null +++ b/sample_task/0014.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7837f766bc54931f9775054511d779fefce243f02cf6bacd31dc27c6d36a0287 +size 747734 diff --git a/sample_task/0015.png b/sample_task/0015.png new file mode 100644 index 0000000000000000000000000000000000000000..47420dd76bb278a99aac44e74f5e4b532fbc8c63 --- /dev/null +++ b/sample_task/0015.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37c73b74052b8eb986edba1253cdf340751418222fd351a9d2adeca5f08ba7d1 +size 750931 diff --git a/sample_task/0016.png b/sample_task/0016.png new file mode 100644 index 0000000000000000000000000000000000000000..2065c41ab1cf5556a8f560d2e0d2ece45e2faf54 --- /dev/null +++ b/sample_task/0016.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:059c91a4065017692ca31493ea01793a5e5cdd052add3574a427577b8219fcf1 +size 753677 diff --git a/sample_task/0017.png b/sample_task/0017.png new file mode 100644 index 0000000000000000000000000000000000000000..b1504b387d0af890c27200f5dbab18ff37542a7c --- /dev/null +++ b/sample_task/0017.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a74ad65bb7e29ea96f0a12383b66e9a334c4184fddd90781bca778bdd637a1b7 +size 765877 diff --git a/sample_task/0018.png b/sample_task/0018.png new file mode 100644 index 0000000000000000000000000000000000000000..08e69a685260fb097bfa9d862428640efe4b5768 --- /dev/null +++ b/sample_task/0018.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a95d6bebcd6140b363a80d93a1a6697c23d85085a503a7b3ad7126c7cac65b7e +size 762377 diff --git a/sample_task/0019.png b/sample_task/0019.png new file mode 100644 index 0000000000000000000000000000000000000000..a4291796fe2cb2a3e2ebd25538f08c8f371980c8 --- /dev/null +++ b/sample_task/0019.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0453cf0dbc95ec76d9f5ffa966d14bf349e624e5bf01c7667bf0aff86928f0c3 +size 764488 diff --git a/sample_task/0020.png b/sample_task/0020.png new file mode 100644 index 0000000000000000000000000000000000000000..a99ad1320188b6514f0d303164d9ef3f0aeae5c7 --- /dev/null +++ b/sample_task/0020.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8249c7c010a09f40ad7adf26f937c2a0f528fabac4948c9b54f9220f03a07d0d +size 762436 diff --git a/sample_task/0021.png b/sample_task/0021.png new file mode 100644 index 0000000000000000000000000000000000000000..c6b09b5241ad2faff91bd73f4f1c550b758b9efc --- /dev/null +++ b/sample_task/0021.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:634c0529147ca5d3bae789d7354940e1cfdfc88067cacf9a05e64f719712376b +size 805472 diff --git a/sample_task/0022.png b/sample_task/0022.png new file mode 100644 index 0000000000000000000000000000000000000000..c747593d3e8111c9ce60254ab901f4d447a45a74 --- /dev/null +++ b/sample_task/0022.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1534e5af5b059a57abd6bd70795417a221b7e9578e0e3a29126c1c4b5b389846 +size 798757 diff --git a/sample_task/0023.png b/sample_task/0023.png new file mode 100644 index 0000000000000000000000000000000000000000..b9bbacbf48c537cee54d8a1c1b8d3437c05da4ba --- /dev/null +++ b/sample_task/0023.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42b1e629a99963585139a35da734571c58d281304540c48d464cf8e4a796c2fa +size 777402 diff --git a/sample_task/0024.png b/sample_task/0024.png new file mode 100644 index 0000000000000000000000000000000000000000..6a761fc351d2aaac6f3e089ed81441f2afe1e5e7 --- /dev/null +++ b/sample_task/0024.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:032dd2344a820a57ed04cd73f06ab7726f3c88325ea2cf38f67a5aec3f37669d +size 789362 diff --git a/sample_task/0025.png b/sample_task/0025.png new file mode 100644 index 0000000000000000000000000000000000000000..7f081c9b40370884fd64ef827c47e915ebe704e3 --- /dev/null +++ b/sample_task/0025.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b66a504c1d500c67a1689eb136dcd3223830724f553fbc7278de3ec47a62897 +size 803259 diff --git a/sample_task/0026.png b/sample_task/0026.png new file mode 100644 index 0000000000000000000000000000000000000000..6934eec1389a9af00c27eac9d69e52babc67eb6b --- /dev/null +++ b/sample_task/0026.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f1de97565fd94540322add34923da6ee77f432a7350a92e845657001027335f1 +size 776421 diff --git a/sample_task/0027.png b/sample_task/0027.png new file mode 100644 index 0000000000000000000000000000000000000000..ff2cdec70b40bc1a251de009c45b4fa01b01ad6b --- /dev/null +++ b/sample_task/0027.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed777a5a7e8d570a3dc924df1253e1231c11ecd213cc7d9e47b5f0c8b0379ab7 +size 775428 diff --git a/sample_task/0028.png b/sample_task/0028.png new file mode 100644 index 0000000000000000000000000000000000000000..24f675d909bb98caebc7eac2b6d35c3b915e1899 --- /dev/null +++ b/sample_task/0028.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4dba3a0e7b3ea00e122a24da799633b32838968063bcd59eea931e42286480cb +size 226557 diff --git a/sample_task/0029.png b/sample_task/0029.png new file mode 100644 index 0000000000000000000000000000000000000000..15435b1c88da766d755fbbd1d3e71eef1c138867 --- /dev/null +++ b/sample_task/0029.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c5f084999f98c28875612b7dbf8017321987ca2355ed4e6fd436d52c5958cbe +size 163759 diff --git a/sample_task/0030.png b/sample_task/0030.png new file mode 100644 index 0000000000000000000000000000000000000000..1531d24704f165089c019c34e0e890ab40264f98 --- /dev/null +++ b/sample_task/0030.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bdd85a27f46f3adbd30c9713940b173b2a2f8eb1463fca87975027be167b75c6 +size 166206 diff --git a/sample_task/0031.png b/sample_task/0031.png new file mode 100644 index 0000000000000000000000000000000000000000..f1af3345f5281f250ce0f55a2b2ef457c66cadcb --- /dev/null +++ b/sample_task/0031.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d98f90238f875da5956c2d6a07604f2e8e13845c6bb8405a84e06f5919a224c +size 273188 diff --git a/sample_task/0032.png b/sample_task/0032.png new file mode 100644 index 0000000000000000000000000000000000000000..39737b7b5dd69d48a1ccf1bf112137dc509bb46f --- /dev/null +++ b/sample_task/0032.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4b06225cba33b5da5cce343586b940a7415ea29aadaaf91f0601e6111fdd728 +size 372790 diff --git a/sample_task/0033.png b/sample_task/0033.png new file mode 100644 index 0000000000000000000000000000000000000000..f0d9c1cf4f97b23bb0e89408c964198483ee1efd --- /dev/null +++ b/sample_task/0033.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c555f78158186207144f684cb3ff49278950b76cd991a9b650928606aa626d2d +size 384953 diff --git a/sample_task/0034.png b/sample_task/0034.png new file mode 100644 index 0000000000000000000000000000000000000000..df3eecac9763120950f5b29f0b56528c18fd7124 --- /dev/null +++ b/sample_task/0034.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3968b4835068d411e565c2036ebdc38446b5a3345de43bda3d5a946d2ffb4454 +size 302010 diff --git a/sample_task/0035.png b/sample_task/0035.png new file mode 100644 index 0000000000000000000000000000000000000000..2471b7958f6a998ce44bc5ac9371b10719e7a928 --- /dev/null +++ b/sample_task/0035.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dff53c207c45970aa224c8c6cec80064944a0fc535e525cf8eac99312fbef6e4 +size 339365 diff --git a/sample_task/0036.png b/sample_task/0036.png new file mode 100644 index 0000000000000000000000000000000000000000..d3a0f95b16ad83a7ab58aeb25d009c66141a3cc9 --- /dev/null +++ b/sample_task/0036.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee560c52d1d6673f2098f0b365df7b04933056e836d76c35ef0114e60c53ad01 +size 285754 diff --git a/sample_task/0037.png b/sample_task/0037.png new file mode 100644 index 0000000000000000000000000000000000000000..d7d846e045b8dfdf98f96750be2b179becb4659b --- /dev/null +++ b/sample_task/0037.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82802e79f9808b6d5ce986b4945d2b7b618c719872e24fae6d8125c5a02c8663 +size 896661 diff --git a/sample_task/0038.png b/sample_task/0038.png new file mode 100644 index 0000000000000000000000000000000000000000..ae35a1fc498d65560c80f82a22ec2466d88cd52b --- /dev/null +++ b/sample_task/0038.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6dba4b74111f62429ca9b3b028b787ee00e31689f581c78b282d8951d3896ae7 +size 948234 diff --git a/sample_task/0039.png b/sample_task/0039.png new file mode 100644 index 0000000000000000000000000000000000000000..68d678aaff6c15478a9bb475595cb6a8dc169011 --- /dev/null +++ b/sample_task/0039.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6620c26c22c225404fd02b8b863165a8d5c88be3693ea488eac8a9154c478334 +size 976273 diff --git a/sample_task/0040.png b/sample_task/0040.png new file mode 100644 index 0000000000000000000000000000000000000000..7c40b1115530a681c04a16a0bebf0046005ce4bc Binary files /dev/null and b/sample_task/0040.png differ diff --git a/sample_task/0041.png b/sample_task/0041.png new file mode 100644 index 0000000000000000000000000000000000000000..260a60a168a5949e2e305928c4d582792f32c47f Binary files /dev/null and b/sample_task/0041.png differ diff --git a/sample_task/0042.png b/sample_task/0042.png new file mode 100644 index 0000000000000000000000000000000000000000..4641e13aa5c0a25d7fbcfaf54ee17fc3f4e700f3 Binary files /dev/null and b/sample_task/0042.png differ diff --git a/sample_task/0043.png b/sample_task/0043.png new file mode 100644 index 0000000000000000000000000000000000000000..bb61f0a40a4c8805b1e685d068c6640274133527 --- /dev/null +++ b/sample_task/0043.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:36680f49207c8cf9819896f486c22f5f0701ca646cb38d4d9949a362b034dad7 +size 747414 diff --git a/sample_task/0044.png b/sample_task/0044.png new file mode 100644 index 0000000000000000000000000000000000000000..aafc33af9d612f5dfd2ceabb518b98b338da8254 --- /dev/null +++ b/sample_task/0044.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ef5c99eacc7fbdd522f3ce037cd6f55422ae366781ab31a00ac7ec622b1b813 +size 745159 diff --git a/sample_task/0045.png b/sample_task/0045.png new file mode 100644 index 0000000000000000000000000000000000000000..d31ec556e30be9bba671900395c0b96b9583c6ae --- /dev/null +++ b/sample_task/0045.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:970d6681ae59e6035257930e37bf59d636368a46d13af199b8eea6cf5532231b +size 203364 diff --git a/sample_task/0046.png b/sample_task/0046.png new file mode 100644 index 0000000000000000000000000000000000000000..d178b8838b98d5e897a80cad345492bc88d6aaa4 --- /dev/null +++ b/sample_task/0046.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6f7971719d794c9fcc8d6e06c0593b2b7d6929544de34df0aa2a3d82a8fa085 +size 191837 diff --git a/sample_task/0047.png b/sample_task/0047.png new file mode 100644 index 0000000000000000000000000000000000000000..9ee7b88dec001442698b1cc39de46fba47b6f59e --- /dev/null +++ b/sample_task/0047.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b90a74e587367e1218c48e2fc50c886ea58c79ecf2b5300ad44c00ccd528abbb +size 277456 diff --git a/sample_task/0048.png b/sample_task/0048.png new file mode 100644 index 0000000000000000000000000000000000000000..bf75cb7d4694d55018b70a1b88b560d4ab091333 --- /dev/null +++ b/sample_task/0048.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:145ff456b9425b4a6fba26d27be1ea04b6af0b62e8b76032e8d04088994a840c +size 230981 diff --git a/sample_task/0049.png b/sample_task/0049.png new file mode 100644 index 0000000000000000000000000000000000000000..93fddc658b23cf691139b58ee7befb275be56f0d --- /dev/null +++ b/sample_task/0049.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2badcbbe5d007430ffa3259447c3f8e5d392b80086be0d9fb5d28235c2c2bcf2 +size 529414 diff --git a/sample_task/0050.png b/sample_task/0050.png new file mode 100644 index 0000000000000000000000000000000000000000..f0b45ce34e6a5d97845449a21112e219ebfd2ea7 --- /dev/null +++ b/sample_task/0050.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c845ad179ba1353400abc64f9843ebbba9745bf2ccd33f90121fcc08d95a0db7 +size 569441 diff --git a/sample_task/0051.png b/sample_task/0051.png new file mode 100644 index 0000000000000000000000000000000000000000..9a9466516f82526dea07d9ff19a77ce681d2ae15 --- /dev/null +++ b/sample_task/0051.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:35a9fb57204b9c18a4c8c685c3edc0593edb71f4c06e85379a191121180276b2 +size 581911 diff --git a/sample_task/0052.png b/sample_task/0052.png new file mode 100644 index 0000000000000000000000000000000000000000..e816ed0d6a1ad79bcb4b53f4c3a23d7ddd41e1bf --- /dev/null +++ b/sample_task/0052.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:15f54fbfb48957583025531dff72a0f3a92d63bdb7119265d843ac4855ed5524 +size 678032 diff --git a/sample_task/0053.png b/sample_task/0053.png new file mode 100644 index 0000000000000000000000000000000000000000..0accd24d2a27ef6c278b54fb4bc17eb52edb73c8 --- /dev/null +++ b/sample_task/0053.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aebd74c2c8f5d374f171da13e49c9b6f5897ce08267a3d6080f12783fe0ba054 +size 549303 diff --git a/sample_task/0054.png b/sample_task/0054.png new file mode 100644 index 0000000000000000000000000000000000000000..1595564d22dc6526861ffefdcf96444e94c13b20 --- /dev/null +++ b/sample_task/0054.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a16d3262c293811e4a061513a874a00608c92fb03177b689948a36c700ce1da8 +size 345558 diff --git a/sample_task/0055.png b/sample_task/0055.png new file mode 100644 index 0000000000000000000000000000000000000000..ccd779901a5a4c92942fe177381c67153505a565 --- /dev/null +++ b/sample_task/0055.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:05283207bc7d4ec0931d3c75a30e342e55b32d8bf5c7644f902511c041f86ef0 +size 738340 diff --git a/sample_task/0056.png b/sample_task/0056.png new file mode 100644 index 0000000000000000000000000000000000000000..7d745d5ee8901ab1ae0da4effdb4f57a1086e13c --- /dev/null +++ b/sample_task/0056.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0123ce13b87ba3dd0f25be22991bea7bce99435103db7b6d855e4e326b13c41b +size 749231 diff --git a/sample_task/0057.png b/sample_task/0057.png new file mode 100644 index 0000000000000000000000000000000000000000..98ad25df6fb23de00d6b49b249b3f218ea484cf1 --- /dev/null +++ b/sample_task/0057.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa6d8fb65e83268475bc96821e81bb618a025492bf3375cb08f2b59a485036d2 +size 746194 diff --git a/sample_task/0058.png b/sample_task/0058.png new file mode 100644 index 0000000000000000000000000000000000000000..ecbaae7c8ec8fd62d95a43b6b2d660326012bd98 Binary files /dev/null and b/sample_task/0058.png differ diff --git a/sample_task/0059.png b/sample_task/0059.png new file mode 100644 index 0000000000000000000000000000000000000000..2857538638ac8b34097c05fb3e1d4a5c45862590 --- /dev/null +++ b/sample_task/0059.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3f44371607585cbcbf088e16995f3b09624cff768d43bb989ecd9bff5eed355 +size 137689 diff --git a/sample_task/0060.png b/sample_task/0060.png new file mode 100644 index 0000000000000000000000000000000000000000..e1792adaaa3c42865a8aa81e87585a1fa6e3ff19 --- /dev/null +++ b/sample_task/0060.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d2786132b268cf92df01f097ae7108b74a76f769394bbc03c7e8753df2e970b +size 165571 diff --git a/sample_task/0061.png b/sample_task/0061.png new file mode 100644 index 0000000000000000000000000000000000000000..940bca45d16dedc97d50d7a4d6fec1c15124218c --- /dev/null +++ b/sample_task/0061.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:208abe520a0516a434ca7d02ba5e9a956c90e04e267743112d371289285ec045 +size 185957 diff --git a/sample_task/0062.png b/sample_task/0062.png new file mode 100644 index 0000000000000000000000000000000000000000..cf193ed390819211582fc44349b2b85c43cd02c1 --- /dev/null +++ b/sample_task/0062.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5cbda5c2adb558e40be642a5398e4bb7d62b2adf827c8446ddb0e5ca87b04df7 +size 294910 diff --git a/sample_task/0063.png b/sample_task/0063.png new file mode 100644 index 0000000000000000000000000000000000000000..980e4d3d6086fc88c614d730b8f7255cf144d8ec --- /dev/null +++ b/sample_task/0063.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cdc14a81a7dfb87d040b33d6913c68d43dd97440986e149f30445176166fd731 +size 405409 diff --git a/sample_task/0064.png b/sample_task/0064.png new file mode 100644 index 0000000000000000000000000000000000000000..8f11ce69300cd5504a629c1f79ff0617782b5d13 --- /dev/null +++ b/sample_task/0064.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c725669ff773dab3ed307896daaa4ba87e0b983beb1b194b17e27f122131efab +size 410626 diff --git a/sample_task/0065.png b/sample_task/0065.png new file mode 100644 index 0000000000000000000000000000000000000000..5fd3196b9d701eeb8b812f92d0e482ccf1e75816 --- /dev/null +++ b/sample_task/0065.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07692acdf6ae2b06b78c4229b32912fe71c748212a978b16191af671f817f98a +size 419206 diff --git a/sample_task/0066.png b/sample_task/0066.png new file mode 100644 index 0000000000000000000000000000000000000000..bea2e0a06baf4e1917b623469f2971efbeae0098 --- /dev/null +++ b/sample_task/0066.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fbd461503c3d7f9a42b032e2813f2b84932934818acbde36a529da5399c38005 +size 415756 diff --git a/sample_task/0067.png b/sample_task/0067.png new file mode 100644 index 0000000000000000000000000000000000000000..d57e949faf987158122cc2d7ed5af9a9775ae306 --- /dev/null +++ b/sample_task/0067.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:edb405d1ef9939c2590d5230a3eb1d9ee4896cd4f7533b07e01f5946e57d637f +size 421628 diff --git a/sample_task/0068.png b/sample_task/0068.png new file mode 100644 index 0000000000000000000000000000000000000000..a4cdbe565856a479a2c6b6ca4cb1dc1735420ee7 --- /dev/null +++ b/sample_task/0068.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74a0151336eb839b6eee3f6dc2b6aa3b638b7a60f070e7407522cb06b6067bd1 +size 425587 diff --git a/sample_task/0069.png b/sample_task/0069.png new file mode 100644 index 0000000000000000000000000000000000000000..c65f5da0aacaeaecffb03a9084dd1fb7d4374bf1 --- /dev/null +++ b/sample_task/0069.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c1f524985783628f6c7770186e4547ff37e71df5674e7973cd24979d1050983 +size 736869 diff --git a/sample_task/0070.png b/sample_task/0070.png new file mode 100644 index 0000000000000000000000000000000000000000..623a799f098f747af3887699aed6cc7110adb998 --- /dev/null +++ b/sample_task/0070.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b0dda17d052d9f90f2f5c9172ac305b8d7f2184dd45ced3151dbd03f3f29063e +size 743993 diff --git a/sample_task/0071.png b/sample_task/0071.png new file mode 100644 index 0000000000000000000000000000000000000000..dd746b3f49297a8aa92a203bd0c51704e93946f9 Binary files /dev/null and b/sample_task/0071.png differ diff --git a/sample_task/0072.png b/sample_task/0072.png new file mode 100644 index 0000000000000000000000000000000000000000..7e0c21bab702ec743f61a70b274e0176fac29138 --- /dev/null +++ b/sample_task/0072.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6888fe2dbb06cb3690cb3d8992924a3d8cec9d51e97a368c62946ec2ac028226 +size 415046 diff --git a/sample_task/0073.png b/sample_task/0073.png new file mode 100644 index 0000000000000000000000000000000000000000..653ab593368b85aaf7c2b33c3474c0e1108f9a66 --- /dev/null +++ b/sample_task/0073.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:029a7a1994b9480fc4e17eeafa7e4196c3b02c39c07109f3bb2ce65ea35809fc +size 454004 diff --git a/sample_task/0074.png b/sample_task/0074.png new file mode 100644 index 0000000000000000000000000000000000000000..ba3b299c32e801a367fea3a3b0fc2aa6a8584f25 --- /dev/null +++ b/sample_task/0074.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45a986f018d5a9b0008cad25dd29352dc6102d23cdfe81dc03edce59e973bd29 +size 469507 diff --git a/sample_task/0075.png b/sample_task/0075.png new file mode 100644 index 0000000000000000000000000000000000000000..c40cd9698d3ac73dd53b55e5237697c42e50b29f --- /dev/null +++ b/sample_task/0075.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ae233162e6f3ccfb278d717ed57a3c98511a74525342f4f201f920ca7f2c72d +size 475109 diff --git a/sample_task/0076.png b/sample_task/0076.png new file mode 100644 index 0000000000000000000000000000000000000000..2318f5bb07f4ce812d3b1819c9b349f517c79fc9 --- /dev/null +++ b/sample_task/0076.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58281fafdd63d78e8c5a96d8ce3c7a642414175b04ef08392320cc5cca15dd70 +size 474587 diff --git a/sample_task/0077.png b/sample_task/0077.png new file mode 100644 index 0000000000000000000000000000000000000000..5aa5f881863ab675647e126b86d01fc4e50e1518 --- /dev/null +++ b/sample_task/0077.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c03d0019ff08ab6170d69528cad54b5166804d262aa0edba5503bdaf1e577848 +size 473086 diff --git a/sample_task/0078.png b/sample_task/0078.png new file mode 100644 index 0000000000000000000000000000000000000000..5582a97602d6f8d74949d4345b532fc7bebff511 --- /dev/null +++ b/sample_task/0078.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ced40591c68c5ada76cd32a7888c0c86863846761037d6d32a8732768d89b2bf +size 400982 diff --git a/sample_task/0079.png b/sample_task/0079.png new file mode 100644 index 0000000000000000000000000000000000000000..def352f46ca85fa03e3647232e9f53e02ac883e1 --- /dev/null +++ b/sample_task/0079.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c7689d7acfc9329aec3f2cb168e6410e9677dd09b4c2472eae12ec9c0b6b78e +size 442030 diff --git a/sample_task/0080.png b/sample_task/0080.png new file mode 100644 index 0000000000000000000000000000000000000000..e78b885078ebd7485812ddef4530e4c05f0f8780 --- /dev/null +++ b/sample_task/0080.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a130882c6328d92b37965dd6125d6117af001d8d5a4fe41840c00bf7f23bfd4c +size 448512 diff --git a/sample_task/0081.png b/sample_task/0081.png new file mode 100644 index 0000000000000000000000000000000000000000..dad2495b32a30430a2235b879ef07e779d630d91 --- /dev/null +++ b/sample_task/0081.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a57de5d09a25c33990f9afa3e8584c99460f1897587b2684435078420e319c8 +size 457824 diff --git a/sample_task/0082.png b/sample_task/0082.png new file mode 100644 index 0000000000000000000000000000000000000000..4b323b8c2e91b5e9538eba5f9409410861d68f47 --- /dev/null +++ b/sample_task/0082.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d569b0c1499f9402c029c326091fc8231f29a880ea1c785e4540c0be4e2532b7 +size 465554 diff --git a/sample_task/0083.png b/sample_task/0083.png new file mode 100644 index 0000000000000000000000000000000000000000..798a8123aa0ecd17e30fd5c0ee886c90dde26368 --- /dev/null +++ b/sample_task/0083.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1029110ad476726e14d3740a00ba56f050327357723f0ccf6b8a57c7f7143e23 +size 459554 diff --git a/sample_task/0084.png b/sample_task/0084.png new file mode 100644 index 0000000000000000000000000000000000000000..c9ed27b44ae44616c0cdf69bf100d9650a1f6893 --- /dev/null +++ b/sample_task/0084.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a09d2ca419f315ca66d14bdd93efc6d80208dd3b9003c3e16595441fc6ac3b9b +size 475067 diff --git a/sample_task/0085.png b/sample_task/0085.png new file mode 100644 index 0000000000000000000000000000000000000000..8d7b5a071e3b32482f5f46c0d23fb5c6467678a8 --- /dev/null +++ b/sample_task/0085.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c36d5db2146aa59d7f2390dbe58a333f4ca75e747d673be3f44762eb800a351 +size 465116 diff --git a/sample_task/0086.png b/sample_task/0086.png new file mode 100644 index 0000000000000000000000000000000000000000..8bc10835882eabd5e8c04eb3968d63cc63e7c5ad --- /dev/null +++ b/sample_task/0086.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6faef53fce13a5192d506b410c9ed557a04fa1cd54c71b13ddbf5a26af0eac6c +size 456232 diff --git a/sample_task/0087.png b/sample_task/0087.png new file mode 100644 index 0000000000000000000000000000000000000000..b75b6c9c0c99c35d8ee218f236ab29d7cc022d9f --- /dev/null +++ b/sample_task/0087.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f7b7a8b96bbea24b5df972fd76f35db84eaed6ad2b0aa41b7a6a4f23469c5e29 +size 456075 diff --git a/sample_task/0088.png b/sample_task/0088.png new file mode 100644 index 0000000000000000000000000000000000000000..7b87cbf07ffd21d376a6e8615d60df8fa5e3f4ff --- /dev/null +++ b/sample_task/0088.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48e05718f8b2065b15f33b72f3ef09e036c8b1b6df184157871f4798012add95 +size 456413 diff --git a/sample_task/0089.png b/sample_task/0089.png new file mode 100644 index 0000000000000000000000000000000000000000..cb0fd16ff0a61bbbb36862f91b2e38f311fffe41 --- /dev/null +++ b/sample_task/0089.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7aada85a7723e4a0646b23bf585d551fb230a4d6ae0964ce3692031f4dceee7d +size 457764 diff --git a/sample_task/0090.png b/sample_task/0090.png new file mode 100644 index 0000000000000000000000000000000000000000..22e76623c969e62a5fd2ae3ba073a05fb0e0b8ce --- /dev/null +++ b/sample_task/0090.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e302ea8827c33b598653fa9283e872dfd0aa030954788e8933699240b7161d51 +size 457928 diff --git a/sample_task/0091.png b/sample_task/0091.png new file mode 100644 index 0000000000000000000000000000000000000000..80e0309666b98e57178c01fef1776a4f0826ec5e --- /dev/null +++ b/sample_task/0091.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84bce68843ae566d28a18f4c0896bb9f5e75d1af03b51f7f1e046c9f456ec2f3 +size 461042 diff --git a/sample_task/0092.png b/sample_task/0092.png new file mode 100644 index 0000000000000000000000000000000000000000..622dc81f55f243d794a509dfa4d952ebb455b44c --- /dev/null +++ b/sample_task/0092.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f68a643d72343d14323c2ef2e9def64f606222136c932d126fc88fd6f4467b3 +size 461526 diff --git a/sample_task/0093.png b/sample_task/0093.png new file mode 100644 index 0000000000000000000000000000000000000000..e4351bdb205b2ece9b16ab5d3eee73779d91d080 --- /dev/null +++ b/sample_task/0093.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:081e302b6b3f9fa55d7cd1cd8660e2ccb7e0fff56e44222fd8f3b912d87d14b7 +size 466553 diff --git a/sample_task/0094.png b/sample_task/0094.png new file mode 100644 index 0000000000000000000000000000000000000000..a5039f5ff61aec94f4d84bfa3fedbec2aa20ca4f --- /dev/null +++ b/sample_task/0094.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:698297321f8c6043b8051642b0bd631180564ed24d285eb0cb7c34271df745ad +size 461856 diff --git a/sample_task/0095.png b/sample_task/0095.png new file mode 100644 index 0000000000000000000000000000000000000000..b3e956fa99aa70aefabb21580a8a55686c30398e --- /dev/null +++ b/sample_task/0095.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b12490b1d3afd3834f5458a75b4190696ee046fef3e8bc0b597ba869401b81d +size 462210 diff --git a/sample_task/0096.png b/sample_task/0096.png new file mode 100644 index 0000000000000000000000000000000000000000..d41b871a867c7d5432dfb1cfad294bebf9a5b8dd --- /dev/null +++ b/sample_task/0096.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f2547ad7375abf034fff0061daa0e376ef6ceb9da25a0a50c46263c049aee84 +size 469459 diff --git a/sample_task/0097.png b/sample_task/0097.png new file mode 100644 index 0000000000000000000000000000000000000000..e5e72e2e70b04be80cef6e7037645b517c7d1318 --- /dev/null +++ b/sample_task/0097.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f891621cf6fa00f2907816003ad818d6edc04d627e674a6036115000cd06277d +size 428354 diff --git a/sample_task/0098.png b/sample_task/0098.png new file mode 100644 index 0000000000000000000000000000000000000000..0f301235db5d1f1376e757887cd6cbffbffff7ff --- /dev/null +++ b/sample_task/0098.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9dcdc43b2899124167f94670df4da3bb4b2afc567fc7921a15e51dd6a20fd450 +size 581360 diff --git a/sample_task/0099.png b/sample_task/0099.png new file mode 100644 index 0000000000000000000000000000000000000000..16aa8b16c6788e416e19fd09551c3384663fba51 --- /dev/null +++ b/sample_task/0099.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84632797ee046b2c65b985cafef6631510b07ffb801093c7498dcc4ba9a5f257 +size 484404 diff --git a/sample_task/0100.png b/sample_task/0100.png new file mode 100644 index 0000000000000000000000000000000000000000..9b65c5f0adc8e17f76c444e8d40a459cb80438c1 --- /dev/null +++ b/sample_task/0100.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ba6336d88d8772f7ffda391d51ea2724f6eaa31b12a2e43b8be485cd952281b +size 480036 diff --git a/sample_task/0101.png b/sample_task/0101.png new file mode 100644 index 0000000000000000000000000000000000000000..42283579ab47bed4b4daff3e9fbfa446e5f32e3a --- /dev/null +++ b/sample_task/0101.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a78ddfbf405e5fa511af40bcd6817a54b1ee7f88b43d31259ad59399450f4f2 +size 480453 diff --git a/sample_task/0102.png b/sample_task/0102.png new file mode 100644 index 0000000000000000000000000000000000000000..c693e218fbe1d443e3942169e6c69741f0b54c78 --- /dev/null +++ b/sample_task/0102.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d90572e39ce9ecb441d7b1d232269f867e489fd54ed23cd0edfac2d7661dccf2 +size 476550 diff --git a/sample_task/0103.png b/sample_task/0103.png new file mode 100644 index 0000000000000000000000000000000000000000..7b8e57301588e2cce14e27c8a9a1a7cd488cc7c0 --- /dev/null +++ b/sample_task/0103.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00666255ee8b50c8b6fddc9cc4ce854c0697d18f24391dfe65824b3f83172b8c +size 471370 diff --git a/sample_task/0104.png b/sample_task/0104.png new file mode 100644 index 0000000000000000000000000000000000000000..685e1798320d800533c76fe05a93d5357871634f --- /dev/null +++ b/sample_task/0104.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1ca50f18aa86f2b327032e055e32b3484be9c224afcd3c507764588a7ea7f630 +size 481202 diff --git a/sample_task/0105.png b/sample_task/0105.png new file mode 100644 index 0000000000000000000000000000000000000000..5d7d036ee379c2785ce9839144b0b2e06f8f755a --- /dev/null +++ b/sample_task/0105.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aeb86b0ace8c9442dbf128ca5d1b0459a58ac393228743e533f27a0327ab452c +size 494564 diff --git a/sample_task/0106.png b/sample_task/0106.png new file mode 100644 index 0000000000000000000000000000000000000000..7b40ec7daa310179180c6292cd55a8316da222ac Binary files /dev/null and b/sample_task/0106.png differ diff --git a/sample_task/0107.png b/sample_task/0107.png new file mode 100644 index 0000000000000000000000000000000000000000..caa328e084d5251c621a419ad15312ebf15edf45 --- /dev/null +++ b/sample_task/0107.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ad7faf28a23bfeb326bf7328219e82f0fd6dffb6d13f6a10c67e9ef3e1bd37c +size 368328 diff --git a/sample_task/0108.png b/sample_task/0108.png new file mode 100644 index 0000000000000000000000000000000000000000..c2c40b2cf182aa2cd8da458b9a18afe3a25820b7 --- /dev/null +++ b/sample_task/0108.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc3ed710557de61bb0852c8e6a2c58ba11f87f73196cde3ee9450c927ce18aaf +size 393086 diff --git a/sample_task/0109.png b/sample_task/0109.png new file mode 100644 index 0000000000000000000000000000000000000000..9905b01b0c8cc44758e79c1c3968dd42265d7b74 --- /dev/null +++ b/sample_task/0109.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:88bde1b1f98be3eb89b47febc18c790e4fa10dec226166772042d84a927a8af6 +size 410832 diff --git a/sample_task/0110.png b/sample_task/0110.png new file mode 100644 index 0000000000000000000000000000000000000000..aa5549bcc937d8135daabdf6ca0f5adc39309732 --- /dev/null +++ b/sample_task/0110.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba3d2a5d68daec02edb57e666acd5ba477290c26ae2e983844dda6a97119e66e +size 405458 diff --git a/sample_task/0111.png b/sample_task/0111.png new file mode 100644 index 0000000000000000000000000000000000000000..c312e3c9907a2e44ac7ecc23794939ca6728bd5a --- /dev/null +++ b/sample_task/0111.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c75296ed6a59629461554f8409a93b7f04bd7ce8420034132994cfc93f8b246 +size 405952 diff --git a/sample_task/0112.png b/sample_task/0112.png new file mode 100644 index 0000000000000000000000000000000000000000..6cd173a2e3bf41e2d14c3b87f7062464c6fd7fd5 --- /dev/null +++ b/sample_task/0112.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:287d7ab61cb7320bc1a0209542cae0de93d61315d1f3b1e088298dfadd3da5a1 +size 405373 diff --git a/sample_task/0113.png b/sample_task/0113.png new file mode 100644 index 0000000000000000000000000000000000000000..3c3af1c5242376d3e367ecc24967126dddb61922 --- /dev/null +++ b/sample_task/0113.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb2f64fc288c103a2716fc73d077a391d3f9e5b4c894f9f79b8d7a93925cd6f6 +size 405549 diff --git a/sample_task/0114.png b/sample_task/0114.png new file mode 100644 index 0000000000000000000000000000000000000000..670cd71b8011127de0d88ab2bf9865025aab4310 --- /dev/null +++ b/sample_task/0114.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e60417a8d16114f49b8d659c3939af191b87107e670f00cc38b9ac5ef994429 +size 405550 diff --git a/sample_task/0115.png b/sample_task/0115.png new file mode 100644 index 0000000000000000000000000000000000000000..8f7c5c6aa3e925d0344ac9ac8390202f2f71f33a --- /dev/null +++ b/sample_task/0115.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81b0f08a12e2a27cbabd593b7905c28abcbb27fd52d5904e4b94e56f32f7d8bd +size 405742 diff --git a/sample_task/0116.png b/sample_task/0116.png new file mode 100644 index 0000000000000000000000000000000000000000..f49a363d7d4f181b7fc507a816b655c0d5bc894d --- /dev/null +++ b/sample_task/0116.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:390cf6f71afca2a1f26875b4d30259aad5a536e60282f1a1b1839d09bb2d7725 +size 405895 diff --git a/sample_task/0117.png b/sample_task/0117.png new file mode 100644 index 0000000000000000000000000000000000000000..80aa4394ac810a310ab279ee64eb1c794dd31f75 --- /dev/null +++ b/sample_task/0117.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e42ba96c089f9158ba47fe0c4409137468a5b2befaf7f777a6ddda6fdbcf8c7 +size 409580 diff --git a/sample_task/0118.png b/sample_task/0118.png new file mode 100644 index 0000000000000000000000000000000000000000..7c6597fe55208aa0b80c8087abcf112777616beb --- /dev/null +++ b/sample_task/0118.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82c89fc6d678dd9d7edbeb23dcefb4affc4d969955dff0d56f34c7779bd9c9d4 +size 408679 diff --git a/sample_task/0119.png b/sample_task/0119.png new file mode 100644 index 0000000000000000000000000000000000000000..136a177bc3d9272c834496f7939c4871d1a9adb4 --- /dev/null +++ b/sample_task/0119.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:880340c8756a6b2d7d23cdac2d93b71fa7fec352eff0fefd5df76b8ba8b44c85 +size 396264 diff --git a/sample_task/0120.png b/sample_task/0120.png new file mode 100644 index 0000000000000000000000000000000000000000..a5ffa6681240ff529b4aae2bae8ab8e28b7336bb --- /dev/null +++ b/sample_task/0120.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bdf452cbbec160cc67d1dd6425cd83a71748889e707982f76406ba384eab033e +size 396421 diff --git a/sample_task/0121.png b/sample_task/0121.png new file mode 100644 index 0000000000000000000000000000000000000000..aa9f04827eb7c04bd51ba63131b248e961734fa2 --- /dev/null +++ b/sample_task/0121.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aeff5d57b57f08c2a3d095d84dededd0a87355f548464449f18393771cea69c6 +size 399501 diff --git a/sample_task/0122.png b/sample_task/0122.png new file mode 100644 index 0000000000000000000000000000000000000000..1a4cc4d368e19415fe5b7b89aca72e4bbbf525f5 --- /dev/null +++ b/sample_task/0122.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ea4a5802842c63e1d63a764e7564574d6835c506987643db37769ba70cd089c +size 399390 diff --git a/sample_task/0123.png b/sample_task/0123.png new file mode 100644 index 0000000000000000000000000000000000000000..39b9a8de60f8dc280a08bd7c7f2a9cbd1d6f91e1 --- /dev/null +++ b/sample_task/0123.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5de2214014fcd46c8a436186e7ab037977ca249dc47355e5bc7b175ba7a1e36 +size 398032 diff --git a/sample_task/0124.png b/sample_task/0124.png new file mode 100644 index 0000000000000000000000000000000000000000..ad6a5f03bb1320bc2cf1102e2f0ed1471436c2cb --- /dev/null +++ b/sample_task/0124.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6d31890c63d7e1cfb1c257db1c5bf2a8a188194603f41f973eeb7ce4187a7f5 +size 397426 diff --git a/sample_task/0125.png b/sample_task/0125.png new file mode 100644 index 0000000000000000000000000000000000000000..8122180a395b43acf69dd0f9afa82578a266e9ab --- /dev/null +++ b/sample_task/0125.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:05f878ddde564fb24bc1b1a497c1162b29febdb4cc8d5f7930dbfdc28621b27c +size 402404 diff --git a/sample_task/0126.png b/sample_task/0126.png new file mode 100644 index 0000000000000000000000000000000000000000..7df67aca7c6428c200ef83f9c2aebf5bf1b13f9a --- /dev/null +++ b/sample_task/0126.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09719046a2b58b98afa2b3e010232f6ade79513de184f5999ba01d5d1cc6b31a +size 323972 diff --git a/sample_task/0127.png b/sample_task/0127.png new file mode 100644 index 0000000000000000000000000000000000000000..93e6cf4e5efa97edc691e191e966e7fd48fc95bc --- /dev/null +++ b/sample_task/0127.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:92dcc0d667d3e2e1aa18b9c80dcff2e22efb41e23eec963955e433e74c899358 +size 335912 diff --git a/sample_task/0128.png b/sample_task/0128.png new file mode 100644 index 0000000000000000000000000000000000000000..01d95072686c5b88211e38f1a5867e4df1d8b39f --- /dev/null +++ b/sample_task/0128.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:716a3c6805db371ab063c774c76c79284b15f7b9cd773b43d93c0b6f1c98b187 +size 327582 diff --git a/sample_task/0129.png b/sample_task/0129.png new file mode 100644 index 0000000000000000000000000000000000000000..e62db2fada60c358194ba31cfc9d39ec7de940fd --- /dev/null +++ b/sample_task/0129.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed152263718c603016ab84487f39c040d42286eb1dcf1d1ba976e1f445884f47 +size 340964 diff --git a/sample_task/0130.png b/sample_task/0130.png new file mode 100644 index 0000000000000000000000000000000000000000..935d1bfaa97287fb317bd7f280ec89c28f59f3a8 --- /dev/null +++ b/sample_task/0130.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:26cf92f435c0de619e823ea81d18d5ac66c5dc44e2791d95c295c3b3c15a3f47 +size 341588 diff --git a/sample_task/0131.png b/sample_task/0131.png new file mode 100644 index 0000000000000000000000000000000000000000..e32864be136682d980bf0598fc28060fc79e720e --- /dev/null +++ b/sample_task/0131.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a66aa960ce48261d4d2244f51f4fc4b0c523de968c3cf67185bcc1d0789671d7 +size 340199 diff --git a/sample_task/0132.png b/sample_task/0132.png new file mode 100644 index 0000000000000000000000000000000000000000..e82a7454791bf134bdfe093e5840b92a2bc38a4c --- /dev/null +++ b/sample_task/0132.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3f2cae12cff14b39474c2c0ec281d3964e03b6c9abf3d39d5bd7b5be63dad1c +size 340231 diff --git a/sample_task/0133.png b/sample_task/0133.png new file mode 100644 index 0000000000000000000000000000000000000000..3e52d8984b3c4d9ae2dcc8aec1805a7074ae7859 --- /dev/null +++ b/sample_task/0133.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7fbf77c53a6eb7ece81eae621dc44e4289fdba8eab3c48fc7e93ac5d72eb4067 +size 340941 diff --git a/sample_task/0134.png b/sample_task/0134.png new file mode 100644 index 0000000000000000000000000000000000000000..d86d86e5b49c889e7285d30e9e0ee2fe243686a1 --- /dev/null +++ b/sample_task/0134.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7ac6f77758967710e2ca9ed462e636988079bbcd2c504e82d70d33f47ad6a3f +size 340892 diff --git a/sample_task/0135.png b/sample_task/0135.png new file mode 100644 index 0000000000000000000000000000000000000000..2c61dd1c51151bd7cd0eb3dca827717c4d7619db --- /dev/null +++ b/sample_task/0135.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca95428b43973e235b1b3efa0a574b30f14eaae795490ba78a780834b7009976 +size 340946 diff --git a/sample_task/0136.png b/sample_task/0136.png new file mode 100644 index 0000000000000000000000000000000000000000..c9fc3146894408abdb1c5f8486ac3e77b3348e92 --- /dev/null +++ b/sample_task/0136.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8812080080aea698174064a67715ebaceb1b163bba4ca5c309d575986f8f4c3 +size 340999 diff --git a/sample_task/0137.png b/sample_task/0137.png new file mode 100644 index 0000000000000000000000000000000000000000..7987b9067ad07c3454c22c1b3949cda5bc75cf20 --- /dev/null +++ b/sample_task/0137.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:abd342b02462c63f13f8bfce46ac049dfe3254ff886b0b19ff1753f452f64979 +size 340943 diff --git a/sample_task/0138.png b/sample_task/0138.png new file mode 100644 index 0000000000000000000000000000000000000000..faab6987d8aa6eac05d4562e6ae3e44d22ae4482 --- /dev/null +++ b/sample_task/0138.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b7cb13fd90fc3b9f39de18dbe671a73cfaf619e25c002ff0049036dae14ff9be +size 340947 diff --git a/sample_task/0139.png b/sample_task/0139.png new file mode 100644 index 0000000000000000000000000000000000000000..272031a826b2029d787caab799cc305c5a34bf33 --- /dev/null +++ b/sample_task/0139.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6853d8634e9e959b6252ae8da1b025003f15d15c16acb5f427db45883d726f7 +size 340957 diff --git a/sample_task/0140.png b/sample_task/0140.png new file mode 100644 index 0000000000000000000000000000000000000000..91baf87f755c08c92b9779801f1538d1dbef7d94 --- /dev/null +++ b/sample_task/0140.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b7cd4cae6719176fef51fb0942c6f00fa96cb85aea906c99c6cfb1979e748a15 +size 341274 diff --git a/sample_task/0141.png b/sample_task/0141.png new file mode 100644 index 0000000000000000000000000000000000000000..ff317c6f042098996a9b848b04a3d3c48b8d7b6f --- /dev/null +++ b/sample_task/0141.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3feaac3b27c90275c78f603b65924f1a8ceeeafcdb8c78c91766e267135f41c1 +size 341333 diff --git a/sample_task/0142.png b/sample_task/0142.png new file mode 100644 index 0000000000000000000000000000000000000000..8f586315a4b65435c56dd656cad4bac797d87838 --- /dev/null +++ b/sample_task/0142.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8117039af321f79d07d111dfa2ae506ad2e7bc3bad456ceae532c146450d6abb +size 345273 diff --git a/sample_task/0143.png b/sample_task/0143.png new file mode 100644 index 0000000000000000000000000000000000000000..0c7620b4d68ddc575771206473312193cef939bc --- /dev/null +++ b/sample_task/0143.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a12fb82c1aa00078637e8e76558e91f9b19ff5e585f606a06a4cfbe85269e01 +size 344637 diff --git a/sample_task/0144.png b/sample_task/0144.png new file mode 100644 index 0000000000000000000000000000000000000000..f3a060ca9ed08db2231206f91772b8d2d34b679d --- /dev/null +++ b/sample_task/0144.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:56d8ba49a3863921c69cdc2f76f83ee7c40d79b39346bd0020f6d56ddef80bcf +size 344923 diff --git a/sample_task/0145.png b/sample_task/0145.png new file mode 100644 index 0000000000000000000000000000000000000000..106c2b628090b1a896a5b08212854533f1187dda --- /dev/null +++ b/sample_task/0145.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54506c33fc316a18bd75b52fb2e09934d4ec88a0ec27d576b5d2004c5fff2270 +size 345481 diff --git a/sample_task/0146.png b/sample_task/0146.png new file mode 100644 index 0000000000000000000000000000000000000000..691a3940236666bd5b9a73f7de08714a4391aa90 --- /dev/null +++ b/sample_task/0146.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b03bbd79ae287443ea0f8c444775e4ad9f9566923974ac3e14beee44cdc73b1a +size 345808 diff --git a/sample_task/0147.png b/sample_task/0147.png new file mode 100644 index 0000000000000000000000000000000000000000..ff32cb713a2719c6245b23e8ecd29600dda4a734 --- /dev/null +++ b/sample_task/0147.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:676f48b50dd96cf9b86eb450f06a7b7a2807d7ffc8b64008d6939b4fc81d9ca8 +size 344148 diff --git a/sample_task/0148.png b/sample_task/0148.png new file mode 100644 index 0000000000000000000000000000000000000000..31aea81909833744a00481de64b95a9ea88eaf9f --- /dev/null +++ b/sample_task/0148.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53eb88e4c29f00d9889ccf900a745df4cafba5ad2191324b4be60a7fe8b51d06 +size 425456 diff --git a/sample_task/0149.png b/sample_task/0149.png new file mode 100644 index 0000000000000000000000000000000000000000..186fb626c47e7afba23b3b426295183cb6c768af --- /dev/null +++ b/sample_task/0149.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f50845ec06d9e74f4246b9a0cca4453a6a1e8e223002d696ad7345fe05f2fee +size 214842 diff --git a/sample_task/0150.png b/sample_task/0150.png new file mode 100644 index 0000000000000000000000000000000000000000..575087f2d42878d51b6ea3a35601b9d0156eb673 --- /dev/null +++ b/sample_task/0150.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d077b89ead35da00440143a47bf5815653191bf7bce7474ef4286dddc6a14dc3 +size 215496 diff --git a/sample_task/0151.png b/sample_task/0151.png new file mode 100644 index 0000000000000000000000000000000000000000..4ebb9c6e818456129aef03ab1f395f1612ed002e --- /dev/null +++ b/sample_task/0151.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9431222b965981ab1a60ee69c23120136a493b462c425190d6807c0709418175 +size 215566 diff --git a/sample_task/0152.png b/sample_task/0152.png new file mode 100644 index 0000000000000000000000000000000000000000..e0f20cf0633334e27bb99465c728de57af203601 --- /dev/null +++ b/sample_task/0152.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12cdddddf8f30e2e7dc03776f9582b02b084af4fbd03aebbf9059ea8cc349a96 +size 215541 diff --git a/sample_task/0153.png b/sample_task/0153.png new file mode 100644 index 0000000000000000000000000000000000000000..d87695edb8808da486ad3d84547b8edeea87e3d6 --- /dev/null +++ b/sample_task/0153.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf76722b613b98f5d623cd50215cfdf27b7b7834f8b2332947807b677232f8b9 +size 216015 diff --git a/sample_task/0154.png b/sample_task/0154.png new file mode 100644 index 0000000000000000000000000000000000000000..4cfce9abf2850ab4d36cf976e3dc34c4233b6251 --- /dev/null +++ b/sample_task/0154.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e93898ba68e9445212df595dd0b1da5d251390026da07514ae4c74b1183e7068 +size 216165 diff --git a/sample_task/0155.png b/sample_task/0155.png new file mode 100644 index 0000000000000000000000000000000000000000..934e08ec801ab1be45a30938bdb70875f6276fed --- /dev/null +++ b/sample_task/0155.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d7a2a7b0f79d766d664b050172af5cdb078b5a4da6226b751c18a19090c1690c +size 215856 diff --git a/sample_task/0156.png b/sample_task/0156.png new file mode 100644 index 0000000000000000000000000000000000000000..0ef8e14efa75d44e83a582062ea0d79acbc41e71 --- /dev/null +++ b/sample_task/0156.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5506c09e88fd74ce2b00be08d7e06c36b02193dd66f4d382d64decd7d65cdf1f +size 216104 diff --git a/sample_task/0157.png b/sample_task/0157.png new file mode 100644 index 0000000000000000000000000000000000000000..23c81df04979e4532ad8033be9ff71f3c8931edc --- /dev/null +++ b/sample_task/0157.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c5ffde7b9e803db27ccefbc11da57e6baacba664b933a058aeeadda3bfcea436 +size 216509 diff --git a/sample_task/0158.png b/sample_task/0158.png new file mode 100644 index 0000000000000000000000000000000000000000..a81e69b5d04080380e72f9dac5c330c215cdcd21 --- /dev/null +++ b/sample_task/0158.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b18ffd71894d1139a8e496082af642b76a577c570552351dc7bec81ed484dbc1 +size 215692 diff --git a/sample_task/0159.png b/sample_task/0159.png new file mode 100644 index 0000000000000000000000000000000000000000..39d5ea0cb1a201a121865da8dd96362d5bda2c2d --- /dev/null +++ b/sample_task/0159.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ae80c12482c06c891999842e00c182e7d59ff4c0594eb0f8ff12bbcc9dbd7c7 +size 216418 diff --git a/sample_task/0160.png b/sample_task/0160.png new file mode 100644 index 0000000000000000000000000000000000000000..b8ed444965ba1cec6caeb4e74c60052d82b7fb27 --- /dev/null +++ b/sample_task/0160.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ac872c8b98f9e2d7114aa6f571086d16098b5e17b8fc3e02fefa41184f08e014 +size 216292 diff --git a/test_ai_integration_http.py b/test_ai_integration_http.py index a14206dd66a216eb71c8181e4061b720aec53116..372c20bc6e14d840b1aca243d16ab932867039c2 100644 --- a/test_ai_integration_http.py +++ b/test_ai_integration_http.py @@ -1,515 +1,159 @@ """ -Test AI integration with local storage and zero CPU memory usage. -All operations are performed through local storage with direct tensor core access. +Test Florence-2-Large model integration with vGPU. +Configure PyTorch to use vGPU as device and run model inference. """ -import asyncio -from gpu_arch import Chip -from ai_http import AIAccelerator -from virtual_vram import VirtualVRAM -from PIL import Image -import numpy as np -from http_storage import LocalStorage -import time -import os -import platform -import contextlib -import atexit import logging +import time +from contextlib import contextmanager + +import torch +from torch import nn +from transformers import AutoModel, AutoTokenizer +from virtual_vram import VirtualVRAM +from http_storage import HTTPGPUStorage +from torch_vgpu import VGPUDevice, to_vgpu # Configure logging logging.basicConfig( level=logging.INFO, - format='%(asctime)s - %(levelname)s - %(message)s' + format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) +logger = logging.getLogger(__name__) -# Local storage manager -@contextlib.contextmanager -def storage_manager(): +@contextmanager +def gpu_context(): + """Context manager for vGPU resources""" storage = None - try: - # Create new storage instance with local path - storage = LocalStorage(storage_path="local_storage") - - # Verify storage is accessible - if storage.ping(): - logging.info("Successfully initialized local storage") - else: - raise RuntimeError("Local storage is not accessible") - + storage = HTTPGPUStorage() yield storage - - except Exception as e: - logging.error(f"Storage initialization error: {e}") - raise - if try_connect(): - logging.info("Successfully reconnected to GPU storage server via HTTP") - yield storage - else: - raise finally: if storage: - try: - storage.close() - except: - pass - -# Cleanup handler -def cleanup_resources(): - try: - # Get the current storage instance if it exists - current_storage = LocalStorage._instance - if current_storage is not None: - try: - # Clear any cached data - current_storage.resource_monitor['vram_used'] = 0 - current_storage.resource_monitor['active_tensors'] = 0 - current_storage.resource_monitor['loaded_models'].clear() - except Exception as e: - logging.error(f"Error cleaning up storage resources: {e}") - except Exception as e: - logging.error(f"Error in storage cleanup: {e}") - - # Clear VRAM and other resources - import gc - gc.collect() - -# Register enhanced cleanup handler -atexit.register(cleanup_resources) + storage.close() + logger.info("vGPU resources cleaned up") + +def get_model_size(model): + """Calculate model size in parameters and memory footprint""" + param_size = 0 + for param in model.parameters(): + param_size += param.nelement() * param.element_size() + buffer_size = 0 + for buffer in model.buffers(): + buffer_size += buffer.nelement() * buffer.element_size() + return param_size + buffer_size def test_ai_integration_http(): - print("\n--- Testing Local Storage-Based AI Integration with Zero CPU Usage ---") - from electron_speed import TARGET_SWITCHES_PER_SEC, TRANSISTORS_ON_CHIP, drift_velocity, speed_of_light_silicon + """Test Florence-2-Large model on vGPU with PyTorch integration""" + logger.info("Starting vGPU integration test") - # Initialize components dictionary to store GPU resources - components = { - 'chips': [], - 'ai_accelerators': [], - 'model_id': None, - 'vram': None, - 'storage': None, - 'model_config': None, - 'tensor_registry': {}, - 'initialized': False + status = { + 'model_loaded': False, + 'model_on_vgpu': False, + 'inference_complete': False, + 'cleanup_success': False } - # Initialize global tensor registry - global_tensor_registry = { - 'model_tensors': {}, - 'runtime_tensors': {}, - 'placeholder_tensors': {}, - 'stats': { - 'total_vram_used': 0, - 'active_tensors': 0 - } - } - - print(f"\nElectron-Speed Architecture Parameters:") - print(f"Target switches/sec: {TARGET_SWITCHES_PER_SEC:.2e}") - print(f"Transistors on chip: {TRANSISTORS_ON_CHIP:,}") - print(f"Electron drift velocity: {drift_velocity:.2e} m/s") - print(f"Percentage of light speed: {(drift_velocity/speed_of_light_silicon)*100:.2f}%") - - # Test 1: Local Model Loading - print("\nTest 1: Model Loading with Local Storage") - try: - # Use storage manager for proper resource handling - with storage_manager() as storage: - components['storage'] = storage # Save storage reference - - # Initialize virtual GPU stack with unlimited local storage - chip_for_loading = Chip(chip_id=0, vram_size_gb=None, storage=storage) # Unlimited VRAM - components['chips'].append(chip_for_loading) - - # Initialize VRAM with local storage (unlimited) - vram = VirtualVRAM(size_gb=None, storage=storage) # Explicitly set unlimited - components['vram'] = vram - - # Set up AI accelerator - ai_accelerator_for_loading = AIAccelerator(vram=vram, storage=storage) - ai_accelerator_for_loading.initialize_tensor_cores() - components['ai_accelerators'].append(ai_accelerator_for_loading) - - # Initialize model registry in local storage (unlimited) - storage.store_state("model_registry", "state", { - "initialized": True, - "max_vram": None, # Unlimited VRAM - "active_models": {} - }) - - # Load BLIP-2 Large model directly to HTTP storage - model_id = "microsoft/florence-2-large" - print(f"Loading model {model_id} directly to HTTP storage...") - + with gpu_context() as storage: try: - # Simulate model loading (in real scenario, would load actual model) - model_data = { - "model_name": model_id, - "model_type": "florence-2-large", - "parameters": 771000000, - "architecture": "vision-language", - "loaded_at": time.time() - } + # Initialize vRAM with monitoring + initial_mem = storage.get_used_memory() if hasattr(storage, 'get_used_memory') else 0 + vram = VirtualVRAM(size_gb=None, storage=storage) + device = VGPUDevice(vram=vram) + logger.info("vGPU device initialized with HTTP storage backend") + + # Load Florence model with verification + model_name = "microsoft/florence-2-large" + logger.info(f"Loading {model_name}") - # Load model with local storage verification try: - # Verify storage is accessible - if not ai_accelerator_for_loading.storage.ping(): - raise RuntimeError("Local storage not accessible") - - # Calculate model size for proper VRAM allocation - model_size = model_data["parameters"] * 4 # 4 bytes per parameter (float32) - print(f"Model size: {model_size / (1024**3):.2f} GB") - - # Pre-allocate VRAM for model - ai_accelerator_for_loading.pre_allocate_vram(model_size) - - # Load model with local storage - success = ai_accelerator_for_loading.load_model( - model_id=model_id, - model=model_data - ) + tokenizer = AutoTokenizer.from_pretrained(model_name) + model = AutoModel.from_pretrained(model_name) + status['model_loaded'] = True - if success: - print(f"Model '{model_id}' loaded successfully to local storage") - - # Verify model is loaded in storage - if not ai_accelerator_for_loading.storage.is_model_loaded(model_id): - raise RuntimeError(f"Model {model_id} not found in storage") - - # Verify model is registered in accelerator - if not ai_accelerator_for_loading.has_model(model_id): - raise RuntimeError(f"Model {model_id} not registered in accelerator") - - print(f"Model {model_id} verified in both storage and accelerator") - else: - raise RuntimeError("Failed to load model in local storage") - + # Log model architecture + model_size = get_model_size(model) + logger.info(f"Model loaded: {model_size/1e9:.2f} GB in parameters") + logger.info(f"Model architecture: {model.__class__.__name__}") except Exception as e: - print(f"Exception during model loading: {str(e)}") - success = False - - if success: - print(f"Model '{model_id}' successfully loaded and verified") - - # Store model parameters in components dict - components['model_id'] = model_id - components['model_size'] = model_size - components['model_config'] = model_data - else: - raise RuntimeError("Failed to load model via HTTP storage") + logger.error(f"Model loading failed: {str(e)}") + raise - except Exception as e: - print(f"Detailed model loading error: {str(e)}") - print("Falling back to placeholder model mode...") - # Try loading with placeholder model + # Move model to vGPU with verification try: - # Match server-side model configuration - placeholder_model = { - "model_name": model_id, - "model_type": "placeholder", - "parameters": 1000000, # Small placeholder - "architecture": { - "type": "nvidia_ampere", - "features": ["tensor_cores", "ray_tracing", "dynamic_scheduling"] - }, - "loaded_at": time.time(), - # Server-validated GPU architecture configuration - "num_sms": 108, # A100 config - "tensor_cores_per_sm": 4, - "cuda_cores_per_sm": 64, - "compute_capability": "8.0", - "vram_config": { - "size_gb": 40, - "bandwidth_gbps": 1555, - "cache_size_mb": 40, - "allocation": "dynamic" - } - } - - # Validate required fields before loading - required_fields = ["num_sms", "tensor_cores_per_sm", "cuda_cores_per_sm"] - if not all(field in placeholder_model for field in required_fields): - raise ValueError(f"Missing required GPU architecture fields: {[f for f in required_fields if f not in placeholder_model]}") + model = to_vgpu(model, vram=vram) + model.eval() + status['model_on_vgpu'] = True - # Pre-allocate VRAM for the model - model_size = placeholder_model["parameters"] * 4 # 4 bytes per parameter - if not ai_accelerator_for_loading.pre_allocate_vram(model_size): - raise RuntimeError("Failed to pre-allocate VRAM for model") - - # Load the model with storage verification - if not ai_accelerator_for_loading.storage.ping(): - raise RuntimeError("Storage not accessible") - - success = ai_accelerator_for_loading.load_model( - model_id=model_id, - model=placeholder_model, - processor=None - ) + # Verify model location + for param in model.parameters(): + if not hasattr(param, 'device') or param.device != device: + raise RuntimeError("Model not properly moved to vGPU") - if success: - components['model_id'] = model_id - components['model_config'] = placeholder_model - print("Successfully loaded placeholder model via HTTP") - else: - raise RuntimeError("Placeholder model loading also failed") - - except Exception as e2: - print(f"Placeholder fallback also failed: {str(e2)}") + current_mem = storage.get_used_memory() if hasattr(storage, 'get_used_memory') else 0 + logger.info(f"Model memory usage: {(current_mem - initial_mem)/1e9:.2f} GB") + except Exception as e: + logger.error(f"Model transfer to vGPU failed: {str(e)}") raise - - except Exception as e: - print(f"Model loading test failed: {e}") - return - - # Test 2: Multi-Chip Parallel Processing - print("\nTest 2: Parallel Processing across Multiple Chips") - num_chips = 4 # Using multiple chips for maximum parallelization - chips = [] - ai_accelerators = [] - - try: - # Reuse existing storage instance - shared_storage = components['storage'] - if not shared_storage or not shared_storage.is_connected(): - logging.warning("Storage not available, creating new instance...") - with storage_manager() as new_storage: - components['storage'] = new_storage - shared_storage = new_storage - logging.info("Successfully initialized local storage") - - # Initialize high-performance chip array with HTTP storage - total_sms = 0 - total_cores = 0 - - # Create optical interconnect for chip communication - from gpu_arch import OpticalInterconnect - optical_link = OpticalInterconnect(bandwidth_tbps=800, latency_ns=1) - - # Reuse existing VRAM instance with shared storage - shared_vram = components['vram'] - if shared_vram is None: - shared_vram = VirtualVRAM(storage=shared_storage) - shared_vram.storage = shared_storage - - for i in range(num_chips): - # Configure each chip with shared HTTP storage - chip = Chip(chip_id=i, vram_size_gb=None, storage=shared_storage) - chips.append(chip) - - # Connect chips in a ring topology - if i > 0: - chip.connect_chip(chips[i-1], optical_link) - - # Initialize AI accelerator with shared resources - ai_accelerator = AIAccelerator(vram=shared_vram, storage=shared_storage) - ai_accelerators.append(ai_accelerator) - - # Verify and potentially repair HTTP connection - max_retry = 3 - for retry in range(max_retry): - try: - if not shared_storage.is_connected(): - logging.warning(f"Connection check failed for chip {i}, attempt {retry + 1}") - shared_storage._create_session() # Attempt to reconnect - time.sleep(1) - continue - - # Load model weights from HTTP storage (no CPU transfer) - success = ai_accelerator.load_model(components['model_id'], components['model_config'], None) - if success: - logging.info(f"Successfully initialized chip {i} with model via HTTP") - break - else: - raise RuntimeError("Model loading failed") - - except Exception as e: - if retry < max_retry - 1: - logging.warning(f"Error initializing chip {i}, attempt {retry + 1}: {e}") - time.sleep(1) - continue - else: - logging.error(f"Failed to initialize chip {i} after {max_retry} attempts: {e}") - raise - - # Track total processing units - total_sms += chip.num_sms - total_cores += chip.num_sms * chip.cores_per_sm - # Store chip configuration in HTTP storage - shared_storage.store_state(f"chips/{i}/config", "state", { - "num_sms": chip.num_sms, - "cores_per_sm": chip.cores_per_sm, - "total_cores": chip.num_sms * chip.cores_per_sm, - "connected_chips": [c.chip_id for c in chip.connected_chips] - }) - - print(f"Chip {i} initialized with HTTP storage and optical interconnect") - - print(f"\nTotal Processing Units:") - print(f"- Streaming Multiprocessors: {total_sms:,}") - print(f"- CUDA Cores: {total_cores:,}") - print(f"- Electron-speed tensor cores: {total_cores * 8:,}") - - # Test multi-chip parallel inference with local storage - print(f"\nRunning parallel inference simulation") - - # Create test input data - test_image = np.random.rand(224, 224, 3).astype(np.float32) - print(f"Created test image with shape: {test_image.shape}") - - # Store input image in local storage - input_tensor_id = "test_input_image" - if shared_storage.store_tensor(input_tensor_id, test_image): - print(f"Successfully stored test image in local storage") - else: - raise RuntimeError("Failed to store test image") - - # Synchronize all chips through HTTP storage - start_time = time.time() - - # Distribute workload across chips using HTTP storage - batch_size = test_image.shape[0] // num_chips if test_image.shape[0] >= num_chips else 1 - results = [] - - for i, accelerator in enumerate(ai_accelerators): + # Prepare and validate input + text = "Testing inference on vGPU device" try: - # Run inference using locally stored weights - result = accelerator.inference(components['model_id'], input_tensor_id) + inputs = tokenizer(text, return_tensors="pt") + if not inputs or not all(k in inputs for k in ['input_ids', 'attention_mask']): + raise ValueError("Invalid tokenizer output") - if result is not None: - # Store result in local storage - result_id = f"results/chip_{i}/test_image" - if shared_storage.store_tensor(result_id, result): - results.append(result) - print(f"Chip {i} completed inference and stored result") - else: - print(f"Chip {i} inference succeeded but result storage failed") - else: - print(f"Chip {i} inference failed") - + # Move inputs to vGPU + inputs = {k: to_vgpu(v, vram=vram) for k, v in inputs.items()} + logger.info(f"Input sequence length: {inputs['input_ids'].size(1)}") except Exception as e: - print(f"Error in chip {i} inference: {e}") - - elapsed = time.time() - start_time - - # Calculate performance metrics - ops_per_inference = total_cores * 1024 # FMA ops per core - from electron_speed import drift_velocity, TARGET_SWITCHES_PER_SEC - electron_transit_time = 1 / (drift_velocity * TARGET_SWITCHES_PER_SEC) - theoretical_time = electron_transit_time * ops_per_inference / total_cores - - print(f"\nHTTP-Based Multi-Chip Inference Results:") - print(f"- Chips used: {num_chips}") - print(f"- Results collected: {len(results)}") - print(f"- Total time: {elapsed:.4f}s") - print(f"- Theoretical electron-speed time: {theoretical_time:.6f}s") - print(f"- Speed ratio: {theoretical_time/elapsed:.2f}x theoretical") - print(f"- Operations per second: {ops_per_inference/elapsed:.2e}") - - # Test 3: HTTP Storage Performance - print(f"\nTest 3: HTTP Storage Performance Evaluation") - - # Test tensor storage/retrieval performance - test_sizes = [1024, 4096, 16384, 65536] # Different tensor sizes - storage_times = [] - retrieval_times = [] - - for size in test_sizes: - test_tensor = np.random.rand(size).astype(np.float32) - tensor_id = f"perf_test_{size}" + logger.error(f"Input preparation failed: {str(e)}") + raise - # Test storage time + # Run inference with monitoring + logger.info("Running inference...") start = time.time() - success = shared_storage.store_tensor(tensor_id, test_tensor) - storage_time = time.time() - start + peak_mem = initial_mem - if success: - storage_times.append(storage_time) - - # Test retrieval time - start = time.time() - retrieved = shared_storage.load_tensor(tensor_id) - retrieval_time = time.time() - start + try: + with torch.no_grad(): + outputs = model(**inputs) + if hasattr(storage, 'get_used_memory'): + peak_mem = max(peak_mem, storage.get_used_memory()) + + inference_time = time.time() - start + status['inference_complete'] = True - if retrieved is not None and np.array_equal(test_tensor, retrieved): - retrieval_times.append(retrieval_time) - print(f"Size {size}: Store {storage_time:.4f}s, Retrieve {retrieval_time:.4f}s") - else: - print(f"Size {size}: Retrieval verification failed") - else: - print(f"Size {size}: Storage failed") - - if storage_times and retrieval_times: - avg_storage = sum(storage_times) / len(storage_times) - avg_retrieval = sum(retrieval_times) / len(retrieval_times) - print(f"Average storage time: {avg_storage:.4f}s") - print(f"Average retrieval time: {avg_retrieval:.4f}s") - - # Test 4: Multi-chip coordination via HTTP - print(f"\nTest 4: Multi-Chip Coordination via HTTP") - - # Test cross-chip data transfer - test_data_id = "cross_chip_test_data" - test_data = np.array([1, 2, 3, 4, 5], dtype=np.float32) - - if shared_storage.store_tensor(test_data_id, test_data): - print("Stored test data for cross-chip transfer") + # Log performance metrics + logger.info(f"Inference stats:") + logger.info(f"- Time: {inference_time:.4f}s") + logger.info(f"- Memory peak: {(peak_mem - initial_mem)/1e9:.2f} GB") + logger.info(f"- Output shape: {outputs.last_hidden_state.shape}") + logger.info(f"- Output device: {outputs.last_hidden_state.device}") + except Exception as e: + logger.error(f"Inference failed: {str(e)}") + raise - # Transfer data between chips - new_data_id = shared_storage.transfer_between_chips(0, 1, test_data_id) - if new_data_id: - print(f"Successfully transferred data from chip 0 to chip 1: {new_data_id}") - - # Verify transferred data - transferred_data = shared_storage.load_tensor(new_data_id) - if transferred_data is not None and np.array_equal(test_data, transferred_data): - print("Cross-chip transfer verification successful") - else: - print("Cross-chip transfer verification failed") - else: - print("Cross-chip transfer failed") - - # Test synchronization barriers - barrier_id = "test_barrier" - num_participants = num_chips - - if shared_storage.create_sync_barrier(barrier_id, num_participants): - print(f"Created synchronization barrier for {num_participants} participants") + except Exception as e: + logger.error(f"Test failed: {str(e)}") + raise + finally: + # Cleanup and status report + try: + del model + del outputs + torch.cuda.empty_cache() if hasattr(torch, 'cuda') else None + status['cleanup_success'] = True + except Exception as e: + logger.error(f"Cleanup error: {str(e)}") - # Simulate participants arriving at barrier - for i in range(num_participants): - result = shared_storage.wait_sync_barrier(barrier_id) - if i == num_participants - 1: - if result: - print("All participants reached barrier - synchronization successful") - else: - print("Barrier synchronization failed") - else: - print(f"Participant {i+1} reached barrier") - - print(f"\nHTTP-based AI integration test completed successfully!") - - # Final statistics - final_stats = { - "chips_initialized": len(chips), - "ai_accelerators": len(ai_accelerators), - "total_cores": total_cores, - "model_loaded": components['model_id'] is not None, - "storage_type": "HTTP", - "connection_status": shared_storage.get_connection_status() - } - - print(f"\nFinal System Statistics:") - for key, value in final_stats.items(): - print(f"- {key}: {value}") + logger.info("\nTest Summary:") + for key, value in status.items(): + logger.info(f"- {key}: {'✓' if value else '✗'}") + + final_mem = storage.get_used_memory() if hasattr(storage, 'get_used_memory') else 0 + if final_mem > initial_mem: + logger.warning(f"Memory leak detected: {(final_mem - initial_mem)/1e6:.2f} MB") - except Exception as e: - print(f"Multi-chip processing test failed: {e}") - import traceback - traceback.print_exc() - return - if __name__ == "__main__": test_ai_integration_http() diff --git a/torch_vgpu.py b/torch_vgpu.py new file mode 100644 index 0000000000000000000000000000000000000000..d6c9f6ed7dfbb055a751ffeff60dcac33f2320f6 --- /dev/null +++ b/torch_vgpu.py @@ -0,0 +1,90 @@ +""" +Custom PyTorch device implementation that routes operations through our virtual GPU. +""" +import torch +from typing import Optional, Union, Tuple +import numpy as np +from virtual_vram import VirtualVRAM + +class VGPUStorage(torch.Storage): + """Custom storage class that uses our virtual VRAM""" + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.vram = kwargs.get('vram') + if not self.vram: + from virtual_vram import VirtualVRAM + self.vram = VirtualVRAM() + self.tensor_id = kwargs.get('tensor_id', f"tensor_{id(self)}") + + def _new_shared(self, size): + return VGPUStorage(size, vram=self.vram) + +class VGPUTensor: + """Tensor implementation that uses vGPU for computations""" + @staticmethod + def __new__(cls, elem): + return torch.Tensor._make_subclass(cls, elem, elem.requires_grad) + +class VGPUDevice: + """ + Custom PyTorch device implementation that routes operations through vGPU. + Usage: + vgpu = VGPUDevice() + tensor = torch.randn(2, 3).to(vgpu) + """ + def __init__(self, vram: Optional[VirtualVRAM] = None): + self.vram = vram or VirtualVRAM() + self.tensor_cores = None # Will be initialized when needed + + @property + def type(self): + return 'vgpu' + + def __str__(self): + return self.type + + def __repr__(self): + return self.type + + def _init_tensor_cores(self): + if self.tensor_cores is None: + from tensor_core import TensorCoreArray + self.tensor_cores = TensorCoreArray() + + def _to_vram(self, tensor: torch.Tensor) -> str: + """Store tensor data in virtual VRAM""" + tensor_id = f"tensor_{id(tensor)}" + data = tensor.detach().cpu().numpy() + self.vram.storage.store_tensor(tensor_id, data) + return tensor_id + + def _from_vram(self, tensor_id: str) -> torch.Tensor: + """Retrieve tensor data from virtual VRAM""" + data = self.vram.storage.load_tensor(tensor_id) + return torch.from_numpy(data) + + def matmul(self, a: torch.Tensor, b: torch.Tensor) -> torch.Tensor: + """Matrix multiplication using tensor cores""" + self._init_tensor_cores() + + # Store inputs in VRAM + a_id = self._to_vram(a) + b_id = self._to_vram(b) + + # Perform matmul using tensor cores + result = self.tensor_cores.matmul( + self.vram.storage.load_tensor(a_id), + self.vram.storage.load_tensor(b_id) + ) + + # Create new tensor with result + return torch.from_numpy(result) + +# Register vGPU device type with PyTorch +torch.backends.register_custom_device("vgpu", VGPUDevice) + +def to_vgpu(tensor: torch.Tensor, vram: Optional[VirtualVRAM] = None) -> torch.Tensor: + """Helper function to move tensors to vGPU""" + device = VGPUDevice(vram) + return tensor.to(device=device)