diff --git a/ctgan/synthesizers/base.py b/ctgan/synthesizers/base.py index add0dd7e..2fb49db3 100644 --- a/ctgan/synthesizers/base.py +++ b/ctgan/synthesizers/base.py @@ -105,7 +105,13 @@ def __setstate__(self, state): state['random_states'] = (current_numpy_state, current_torch_state) self.__dict__ = state - device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu') + # Prioritize CUDA if available, then MPSCUDA, finally CPU + if torch.cuda.is_available(): + device = torch.device('cuda:0') + elif torch.backends.mps.is_available(): + device = torch.device('mps') + else: + device = torch.device('cpu') self.set_device(device) def save(self, path): @@ -118,11 +124,33 @@ def save(self, path): @classmethod def load(cls, path): """Load the model stored in the passed `path`.""" - device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu') + # Prioritize CUDA if available, then MPS, finally CPU + if torch.cuda.is_available(): + device = torch.device('cuda:0') + elif torch.backends.mps.is_available(): + device = torch.device('mps') + else: + device = torch.device('cpu') model = torch.load(path) model.set_device(device) return model + def set_device(self, device): + """Set the `device` to be used ('GPU' or 'CPU').""" + self._device = device + if device.type == 'cuda': + # For CUDA, move the generator to the appropriate device + if self._generator is not None: + self._generator.to(self._device) + elif device.type == 'mps': + # For MPS, move module parameters and buffers to the MPS device + if self._generator is not None: + self._generator.to(self._device) + for parameter in self._generator.parameters(): + parameter.data = parameter.data.to(self._device) + for buffer in self._generator.buffers(): + buffer.data = buffer.data.to(self._device) + def set_random_state(self, random_state): """Set the random state. @@ -148,4 +176,4 @@ def set_random_state(self, random_state): raise TypeError( f'`random_state` {random_state} expected to be an int or a tuple of ' '(`np.random.RandomState`, `torch.Generator`)' - ) + ) \ No newline at end of file diff --git a/ctgan/synthesizers/ctgan.py b/ctgan/synthesizers/ctgan.py index 29606a34..b7e9d0a0 100644 --- a/ctgan/synthesizers/ctgan.py +++ b/ctgan/synthesizers/ctgan.py @@ -142,6 +142,10 @@ class CTGAN(BaseSynthesizer): Whether to attempt to use cuda for GPU computation. If this is False or CUDA is not available, CPU will be used. Defaults to ``True``. + mps (bool): + Whether to attempt to use mps for GPU computation. + If this is False or MPS is not available, CPU will be used. + Defaults to ``False``. """ def __init__( @@ -160,6 +164,7 @@ def __init__( epochs=300, pac=10, cuda=True, + mps=False, ): assert batch_size % 2 == 0 @@ -179,12 +184,16 @@ def __init__( self._epochs = epochs self.pac = pac - if not cuda or not torch.cuda.is_available(): + if not cuda and not mps: device = 'cpu' + elif mps and torch.backends.mps.is_available(): + device = 'mps' + elif cuda and torch.cuda.is_available(): + device = 'cuda' elif isinstance(cuda, str): device = cuda else: - device = 'cuda' + device = 'cpu' self._device = torch.device(device) diff --git a/gpdoc/DEA Differential Privacy ROI Report for COBI Use Case.html b/gpdoc/DEA Differential Privacy ROI Report for COBI Use Case.html new file mode 100644 index 00000000..8f5fcd21 --- /dev/null +++ b/gpdoc/DEA Differential Privacy ROI Report for COBI Use Case.html @@ -0,0 +1,292 @@ + + +
+ + +Commercial Business Intelligence (COBI) is Capital One's proprietary analytics platform designed to provide Commercial clients with actionable insights derived from consumer credit card transaction data. COBI helps businesses understand customer behavior, industry spending trends, brand wallet share, and macroeconomic modeling. By leveraging Capital One's extensive and unique transaction dataset, COBI delivers differentiated insights that position the bank as a strategic advisor and enhance client relationships significantly.
+COBI addresses critical business needs by enabling Capital One to:
+Offer unique, actionable insights not available from competitors.
+Enhance client relationships and loyalty by providing differentiated, value-added analytics.
+Support informed decision-making, fostering better outcomes across commercial sectors such as corporate banking, real estate, and broader market analytics.
+Enhanced Data Utility: Differential privacy techniques unlock detailed demographic insights safely, expanding analytical granularity significantly.
+Competitive Advantage: Secure integration of sensitive demographic data, third-party data, and market insights strengthens Capital One's position relative to competitors who rely on less sophisticated anonymization methods.
+Improved Decision Making: More precise, privacy-compliant insights drive superior business strategies, enabling targeted marketing, customer acquisition, and client retention.
+Privacy and Compliance Risks: Addresses significant gaps in COBI's original anonymization controls, reducing the likelihood of non-compliance with GDPR, CCPA, FCRA, and other privacy laws.
+Data Sharing Restrictions: DP solves restrictions posed by traditional anonymization, allowing Capital One to use richer and more granular datasets.
+Consumer Consent Management: Systematizes consent verification, ensuring that data use aligns strictly with consumer expectations and regulatory standards.
+Re-identification Risks: Differential privacy mathematically ensures that individual identities remain protected, effectively mitigating internal and external re-identification threats.
+Regulatory Non-Compliance: Resolves existing ambiguities around aggregation and consent management, ensuring robust compliance.
+Reputational Damage: Reduces the risk of privacy breaches significantly, thereby safeguarding Capital One's reputation and customer trust.
+Risk Avoidance Savings: Differential privacy implementation conservatively mitigates annual risks exceeding $10 million associated with potential fines, litigation, and reputational damage.
+Increased Revenue from Enhanced Analytics: COBI's DP-enabled analytics project incremental revenue uplift ranging from 5-7% annually.
+Operational Efficiency: Estimated annual operational savings of approximately $2 million through reduced manual processes and streamlined privacy governance.
+| ROI Component | +Annual Financial Impact | +
|---|---|
| Risk Avoidance (Fines/Compliance) | +$10M+ | +
| Revenue Growth (Enhanced Insights) | +5-7% incremental uplift | +
| Operational Cost Savings | +$2M | +
| Total Estimated Annual ROI | +$12M+ plus revenue uplift | +
Industry Benchmarks: Organizations like Visa, Mastercard, and fintech firms report substantial financial and competitive gains from DP investments.
+Internal Pilot Results: COBI pilots utilizing DP have demonstrated a 30% increase in data granularity without compromising privacy.
+Client Testimonials: Positive client feedback confirms differentiated value delivered through DP-enabled insights.
+DP's success with COBI validates further applications in consumer banking, credit decisioning, fraud detection, and strategic market analysis.
+Additional implementations promise cumulative benefits across Capital One's enterprise data capabilities.
+Deploying differential privacy within COBI delivers substantial, quantifiable returns, mitigates critical privacy and compliance risks, and positions Capital One as an industry leader in secure and innovative commercial data analytics. Continued investment in DP technology is recommended to fully leverage its comprehensive benefits and maintain competitive differentiation.
+