{"id":59,"date":"2025-09-29T11:29:15","date_gmt":"2025-09-29T02:29:15","guid":{"rendered":"https:\/\/devserver.kr\/blog\/?p=59"},"modified":"2025-09-29T11:29:15","modified_gmt":"2025-09-29T02:29:15","slug":"m1-%eb%a7%a5%ec%97%90%ec%84%9c-pytorch-%ec%84%a4%ec%b9%98%ed%95%98%eb%8a%94-%eb%b0%a9%eb%b2%95","status":"publish","type":"post","link":"https:\/\/devserver.kr\/blog\/mac\/m1-%eb%a7%a5%ec%97%90%ec%84%9c-pytorch-%ec%84%a4%ec%b9%98%ed%95%98%eb%8a%94-%eb%b0%a9%eb%b2%95\/","title":{"rendered":"M1 \ub9e5\uc5d0\uc11c pytorch \uc124\uce58\ud558\ub294 \ubc29\ubc95"},"content":{"rendered":"\n<div class=\"wp-block-jetpack-markdown\"><h1>PyTorch \uc124\uce58<\/h1>\n<p>hoembrew\uc774\uc6a9\ud574\uc11c anaconda \ubd80\ud130 \uc124\uce58\ud558\uace0, \ud65c\uc131\ud654\uc2dc\ud0a4\uace0,<\/p>\n<p>pytorch.org \uac00\uc11c \uc2dc\ud0a4\ub294\ub300\ub85c \uc2a4\ud06c\ub9bd\ud2b8 \ubcf5\ubd99\ud574\uc11c \uc2e4\ud589\uc2dc\ud0a4\uba74 \uc124\uce58\ub41c\ub2e4.<\/p>\n<p>ex)\nconda install pytorch torchvision torchaudio -c pytorch<\/p>\n<p>WARNING conda.core.path_actions:verify(1093): Unable to create environments file. Path not writable.<\/p>\n<p>\uc6cc\ub2dd\uc774 \ub728\uae34 \ub728\ub294\ub370, \uae30\ub0e5 \uace0!<\/p>\n<p>2.0.0 installed!<\/p>\n<h2>M1 GPU \uc0ac\uc6a9\ud558\uae30<\/h2>\n<p>device\uc5d0 \uc801\uc6a9\ud558\ub294 \ucf54\ub4dc!\ndevice = torch.device(\u2018mps:0\u2019 if torch.backends.mps.is_available() else \u2018cpu\u2019)<\/p>\n<h2>MPS \uc9c0\uc6d0 \ud655\uc778<\/h2>\n<p>print (f&quot;PyTorch version:{torch.<strong>version<\/strong>}\u201c) # 1.12.1 \uc774\uc0c1\nprint(f&quot;MPS \uc7a5\uce58\ub97c \uc9c0\uc6d0\ud558\ub3c4\ub85d build \ub418\uc5c8\ub294\uc9c0: {torch.backends.mps.is_built()}\u201d) # True \uc5ec\uc57c \ud569\ub2c8\ub2e4.\nprint(f&quot;MPS \uc7a5\uce58\uac00 \uc0ac\uc6a9 \uac00\ub2a5\ud55c\uc9c0: {torch.backends.mps.is_available()}&quot;) # True \uc5ec\uc57c \ud569\ub2c8\ub2e4.\n!python -c \u2018import platform;print(platform.platform())\u2019<\/p>\n<p>\uc8fc\ud53c\ud130 \ub178\ud2b8\ubd81\uc5d0\uc11c \uc704 \ucf54\ub4dc\ub97c \uc2e4\ud589\ud588\uc744 \ub54c, Pytorch\uc758 \ubc84\uc804\uc740 1.12.0 \ubc84\uc804 \uc774\uc0c1\uc774\uc5b4\uc57c \ud558\uace0, MPS is_built()\uc640 is_available()\uc774 \ubaa8\ub450 True\ub85c \ub098\uc640\uc57c \ud569\ub2c8\ub2e4. \ub9c8\uc9c0\ub9c9\uc73c\ub85c, platform\uc740 arm64\uac00 \ub098\uc640\uc57c \ud604\uc7ac python\uc774 Mac OS\ub97c \uc815\uc0c1\uc801\uc73c\ub85c \uc778\uc2dd\ud55c \uac83\uc785\ub2c8\ub2e4. macOS \ubc84\uc804\ub3c4 12.3 \uc774\uc0c1\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<pre><code class=\"language-python\">import torch\nfrom torch import nn\nimport torch.nn.functional as F\n \nclass Net(nn.Module):\n    def __init__(self):\n        super().__init__()\n        self.lin1 = nn.Linear(5,5)\n \n    def forward(self,x):\n        net = self.lin1(x)\n        return net\n \ndevice = torch.device(&quot;mps&quot;) \nif torch.backends.mps.is_available() \nelse &quot;cpu&quot;\nprint(f&quot;device: {device}&quot;)\n \n# MPS \uc7a5\uce58\uc5d0 \ubc14\ub85c tensor\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4.\nx = torch.ones(5, device=device)\n\n\n# GPU \uc0c1\uc5d0\uc11c \uc5f0\uc0b0 \uc9c4\ud589\ny = x * 2\n \n# \ub610\ub294, \ub2e4\ub978 \uc7a5\uce58\uc640 \ub9c8\ucc2c\uac00\uc9c0\ub85c MPS\ub85c \uc774\ub3d9\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.\nmodel = Net()# \uc5b4\ub5a4 \ubaa8\ub378\uc758 \uac1d\uccb4\ub97c \uc0dd\uc131\ud55c \ub4a4,\nmodel.to(device) # MPS \uc7a5\uce58\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4.\n \n# \uc774\uc81c \ubaa8\ub378\uacfc \ud150\uc11c\ub97c \ud638\ucd9c\ud558\uba74 GPU\uc5d0\uc11c \uc5f0\uc0b0\uc774 \uc774\ub904\uc9d1\ub2c8\ub2e4.\npred = model(x)\nprint(pred)\n<\/code><\/pre>\n<p>\uc608\uce21 \uacb0\uacfc\uc5d0 device=&#8217;mps:0\u2019\ub85c \ub098\uc624\uba74 \uac04\ub2e8\ud55c \ubaa8\ub378\uc744 \ud1b5\ud55c \uc608\uce21\uc5d0\uc11c mps\ub97c \uc815\uc0c1\uc801\uc73c\ub85c \uc0ac\uc6a9\ud55c \uac83\uc785\ub2c8\ub2e4.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[5],"tags":[],"class_list":["post-59","post","type-post","status-publish","format-standard","hentry","category-mac"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/devserver.kr\/blog\/wp-json\/wp\/v2\/posts\/59","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devserver.kr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devserver.kr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devserver.kr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/devserver.kr\/blog\/wp-json\/wp\/v2\/comments?post=59"}],"version-history":[{"count":1,"href":"https:\/\/devserver.kr\/blog\/wp-json\/wp\/v2\/posts\/59\/revisions"}],"predecessor-version":[{"id":60,"href":"https:\/\/devserver.kr\/blog\/wp-json\/wp\/v2\/posts\/59\/revisions\/60"}],"wp:attachment":[{"href":"https:\/\/devserver.kr\/blog\/wp-json\/wp\/v2\/media?parent=59"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devserver.kr\/blog\/wp-json\/wp\/v2\/categories?post=59"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devserver.kr\/blog\/wp-json\/wp\/v2\/tags?post=59"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}