<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=SLM_%ED%8A%9C%EB%8B%9D%EC%98%88%EC%A0%9C</id>
	<title>SLM 튜닝예제 - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=SLM_%ED%8A%9C%EB%8B%9D%EC%98%88%EC%A0%9C"/>
	<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=SLM_%ED%8A%9C%EB%8B%9D%EC%98%88%EC%A0%9C&amp;action=history"/>
	<updated>2026-05-20T01:21:35Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=SLM_%ED%8A%9C%EB%8B%9D%EC%98%88%EC%A0%9C&amp;diff=1034&amp;oldid=prev</id>
		<title>Devcafe: 새 문서: &lt;source lang=python&gt; import numpy as np import torch import torch.nn as nn import torch.optim as optim from typing import List, Dict  class SQLTuningSLM(nn.Module):     def __init__(self, feature_dim, hidden_dim, output_dim):         super(SQLTuningSLM, self).__init__()                  # Feature embedding and processing layers         self.feature_embedding = nn.Sequential(             nn.Linear(feature_dim, hidden_dim),             nn.ReLU(),             nn.Dropout(0.3)...</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=SLM_%ED%8A%9C%EB%8B%9D%EC%98%88%EC%A0%9C&amp;diff=1034&amp;oldid=prev"/>
		<updated>2024-11-22T16:30:46Z</updated>

		<summary type="html">&lt;p&gt;새 문서: &amp;lt;source lang=python&amp;gt; import numpy as np import torch import torch.nn as nn import torch.optim as optim from typing import List, Dict  class SQLTuningSLM(nn.Module):     def __init__(self, feature_dim, hidden_dim, output_dim):         super(SQLTuningSLM, self).__init__()                  # Feature embedding and processing layers         self.feature_embedding = nn.Sequential(             nn.Linear(feature_dim, hidden_dim),             nn.ReLU(),             nn.Dropout(0.3)...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import torch&lt;br /&gt;
import torch.nn as nn&lt;br /&gt;
import torch.optim as optim&lt;br /&gt;
from typing import List, Dict&lt;br /&gt;
&lt;br /&gt;
class SQLTuningSLM(nn.Module):&lt;br /&gt;
    def __init__(self, feature_dim, hidden_dim, output_dim):&lt;br /&gt;
        super(SQLTuningSLM, self).__init__()&lt;br /&gt;
        &lt;br /&gt;
        # Feature embedding and processing layers&lt;br /&gt;
        self.feature_embedding = nn.Sequential(&lt;br /&gt;
            nn.Linear(feature_dim, hidden_dim),&lt;br /&gt;
            nn.ReLU(),&lt;br /&gt;
            nn.Dropout(0.3)&lt;br /&gt;
        )&lt;br /&gt;
        &lt;br /&gt;
        # LSTM for sequential feature processing&lt;br /&gt;
        self.lstm = nn.LSTM(hidden_dim, hidden_dim, num_layers=2, &lt;br /&gt;
                            batch_first=True, dropout=0.3)&lt;br /&gt;
        &lt;br /&gt;
        # Output layers for performance prediction&lt;br /&gt;
        self.performance_predictor = nn.Sequential(&lt;br /&gt;
            nn.Linear(hidden_dim, hidden_dim//2),&lt;br /&gt;
            nn.ReLU(),&lt;br /&gt;
            nn.Linear(hidden_dim//2, output_dim)&lt;br /&gt;
        )&lt;br /&gt;
    &lt;br /&gt;
    def forward(self, x):&lt;br /&gt;
        # Embed input features&lt;br /&gt;
        embedded = self.feature_embedding(x)&lt;br /&gt;
        &lt;br /&gt;
        # Process through LSTM&lt;br /&gt;
        lstm_out, _ = self.lstm(embedded.unsqueeze(1))&lt;br /&gt;
        &lt;br /&gt;
        # Predict performance optimizations&lt;br /&gt;
        performance_output = self.performance_predictor(lstm_out.squeeze(1))&lt;br /&gt;
        &lt;br /&gt;
        return performance_output&lt;br /&gt;
&lt;br /&gt;
class SQLQueryOptimizer:&lt;br /&gt;
    def __init__(self, model_path=None):&lt;br /&gt;
        # Features to consider for SQL query tuning&lt;br /&gt;
        self.features = [&lt;br /&gt;
            &amp;#039;index_count&amp;#039;, &lt;br /&gt;
            &amp;#039;join_complexity&amp;#039;, &lt;br /&gt;
            &amp;#039;table_size&amp;#039;, &lt;br /&gt;
            &amp;#039;where_clause_count&amp;#039;, &lt;br /&gt;
            &amp;#039;aggregation_complexity&amp;#039;,&lt;br /&gt;
            &amp;#039;subquery_depth&amp;#039;&lt;br /&gt;
        ]&lt;br /&gt;
    &lt;br /&gt;
    def extract_query_features(self, sql_query: str) -&amp;gt; np.ndarray:&lt;br /&gt;
        # Placeholder for feature extraction logic&lt;br /&gt;
        # In a real implementation, this would parse the SQL query &lt;br /&gt;
        # and extract relevant performance-related features&lt;br /&gt;
        features = np.random.rand(len(self.features))&lt;br /&gt;
        return features&lt;br /&gt;
    &lt;br /&gt;
    def train_optimization_model(self, queries: List[str], performance_targets: List[float]):&lt;br /&gt;
        # Prepare training data&lt;br /&gt;
        X = np.array([self.extract_query_features(q) for q in queries])&lt;br /&gt;
        y = np.array(performance_targets)&lt;br /&gt;
        &lt;br /&gt;
        # Convert to PyTorch tensors&lt;br /&gt;
        X_tensor = torch.FloatTensor(X)&lt;br /&gt;
        y_tensor = torch.FloatTensor(y)&lt;br /&gt;
        &lt;br /&gt;
        # Initialize model&lt;br /&gt;
        model = SQLTuningSLM(&lt;br /&gt;
            feature_dim=len(self.features), &lt;br /&gt;
            hidden_dim=64, &lt;br /&gt;
            output_dim=1&lt;br /&gt;
        )&lt;br /&gt;
        &lt;br /&gt;
        # Loss and optimizer&lt;br /&gt;
        criterion = nn.MSELoss()&lt;br /&gt;
        optimizer = optim.Adam(model.parameters(), lr=0.01)&lt;br /&gt;
        &lt;br /&gt;
        # Training loop&lt;br /&gt;
        for epoch in range(100):&lt;br /&gt;
            optimizer.zero_grad()&lt;br /&gt;
            predictions = model(X_tensor)&lt;br /&gt;
            loss = criterion(predictions.squeeze(), y_tensor)&lt;br /&gt;
            loss.backward()&lt;br /&gt;
            optimizer.step()&lt;br /&gt;
            &lt;br /&gt;
            if epoch % 10 == 0:&lt;br /&gt;
                print(f&amp;#039;Epoch {epoch}, Loss: {loss.item():.4f}&amp;#039;)&lt;br /&gt;
        &lt;br /&gt;
        return model&lt;br /&gt;
    &lt;br /&gt;
    def suggest_optimizations(self, model, query: str) -&amp;gt; Dict[str, str]:&lt;br /&gt;
        # Extract features for the query&lt;br /&gt;
        features = self.extract_query_features(query)&lt;br /&gt;
        features_tensor = torch.FloatTensor(features)&lt;br /&gt;
        &lt;br /&gt;
        # Predict potential optimizations&lt;br /&gt;
        with torch.no_grad():&lt;br /&gt;
            performance_score = model(features_tensor)&lt;br /&gt;
        &lt;br /&gt;
        # Example optimization suggestions (mock implementation)&lt;br /&gt;
        optimizations = {&lt;br /&gt;
            &amp;#039;index_recommendation&amp;#039;: &amp;#039;Consider adding an index on join columns&amp;#039;,&lt;br /&gt;
            &amp;#039;query_restructuring&amp;#039;: &amp;#039;Simplify complex subqueries&amp;#039;,&lt;br /&gt;
            &amp;#039;performance_score&amp;#039;: f&amp;#039;{performance_score.item():.2f}&amp;#039;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        return optimizations&lt;br /&gt;
&lt;br /&gt;
# Example usage&lt;br /&gt;
def main():&lt;br /&gt;
    optimizer = SQLQueryOptimizer()&lt;br /&gt;
    &lt;br /&gt;
    # Sample training queries and their performance metrics&lt;br /&gt;
    queries = [&lt;br /&gt;
        &amp;quot;SELECT * FROM large_table WHERE complex_condition&amp;quot;,&lt;br /&gt;
        &amp;quot;SELECT AVG(column) FROM nested_subquery_table&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
    performance_targets = [100.0, 75.5]  # Lower is better&lt;br /&gt;
    &lt;br /&gt;
    # Train the optimization model&lt;br /&gt;
    tuning_model = optimizer.train_optimization_model(queries, performance_targets)&lt;br /&gt;
    &lt;br /&gt;
    # Get optimization suggestions for a new query&lt;br /&gt;
    new_query = &amp;quot;SELECT COUNT(*) FROM complex_join_table&amp;quot;&lt;br /&gt;
    suggestions = optimizer.suggest_optimizations(tuning_model, new_query)&lt;br /&gt;
    print(&amp;quot;Optimization Suggestions:&amp;quot;, suggestions)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
</feed>