<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://www.verlab.dcc.ufmg.br/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rada</id>
		<title>VeRLab Wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://www.verlab.dcc.ufmg.br/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rada"/>
		<link rel="alternate" type="text/html" href="http://www.verlab.dcc.ufmg.br/mediawiki/index.php/Special:Contributions/Rada"/>
		<updated>2026-04-04T13:22:06Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.29.0</generator>

	<entry>
		<id>http://www.verlab.dcc.ufmg.br/mediawiki/index.php?title=Singularity&amp;diff=1291</id>
		<title>Singularity</title>
		<link rel="alternate" type="text/html" href="http://www.verlab.dcc.ufmg.br/mediawiki/index.php?title=Singularity&amp;diff=1291"/>
				<updated>2024-05-30T18:21:30Z</updated>
		
		<summary type="html">&lt;p&gt;Rada: Adicionei uma seção de dicas de uso que ajuda a usar o Singularity.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Singularity ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
O '''Singularity''' é uma ferramenta para a criação de ''&amp;quot;máquina container&amp;quot;'' (uma espécie de ''&amp;quot;máquina virtual&amp;quot;'') que trás algumas vantagens, quando for rodar experimentos nas máquinas de processamento do Verlab/J:&lt;br /&gt;
&lt;br /&gt;
* Não precisa ser usuário com privilégios root para executar sua ''máquina container'' (apenas para criar) e pode instalar suas dependências de experimento no container sem alterar a ''máquina host''. Isso evita mudanças e instalação de pacotes nas máquinas de processamento e que podem atrapalham experimentos de outros usuários.&lt;br /&gt;
&lt;br /&gt;
* Depois de criar sua ''máquina container'' com todas suas dependências, pode-se usá-la para rodar experimento em diferentes máquinas host que tenham GPU. Isso trás flexibilidade para rodar experimento em máquinas simultaneamente, sem precisar instalar todas dependências novamente em outra ''máquina host''.&lt;br /&gt;
&lt;br /&gt;
* A massa de arquivos de dataset (que geralmente ocupam espaço &amp;gt;=500GB) ficam localmente armazenados na máquina host, assim evita tráfego desnecessário na rede. Geralmente na pasta /homeLocal/nome_do_usuario.&lt;br /&gt;
&lt;br /&gt;
* O usuário deixa na sua pasta home da rede apenas sua máquina container em formato de imagem (que em geral ocupa ~4GB) assim quando logar em qualquer máquina de processamento a mesma estará disponível para rodar seu experimento.&lt;br /&gt;
&lt;br /&gt;
* Dataset's e containers podem ser armazenados no serviço de storage da rede, assim ficam disponíveis em qualquer máquina de processamento para rodar seu experimento. Geralmente na pasta /srv/storage/datasets/nome_do_usuario e /srv/storage/singularity/images/nome_do_usuario.&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Versão em uso no VeRLab/JLab ==&lt;br /&gt;
&lt;br /&gt;
Atualmente temos a versão 3.10.x instalada nas máquinas da rede VeRLab/JLab. &lt;br /&gt;
&lt;br /&gt;
=== '''Singularity CE v3.x''' ( ''Community Edition'', ''freeware'', versão em todas as máquinas a partir de mar/2022) ===&lt;br /&gt;
** [https://www.verlab.dcc.ufmg.br/mediawiki/index.php/Singularity3  Link para dicas de uso do Singularity CE v3.x]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A versão 2.5.x já foi utilizada, mas seu suporte parou em jul/2018 e foi descontinuada na rede VeRLab/Jlab desde mar/2022.&lt;br /&gt;
&amp;lt;!-- Comentado&lt;br /&gt;
* '''Singularity v2.5.x''' (''freeware'', &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;versão sem suporte desde jul/2018, vai ser descontinuada na rede VeRLab/JLab&amp;lt;/span&amp;gt;)&lt;br /&gt;
**[https://www.verlab.dcc.ufmg.br/mediawiki/index.php/Singularity2  Link para dicas de uso do Singularity v2.5.x]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Regras de bom uso dos recursos ==&lt;br /&gt;
* Arquivos mais importantes e pequenos, como códigos, documentos e resultados finais, devem ser mantidos na home do usuário.&lt;br /&gt;
** '''Obs:''' Usuários '''não''' devem deixar o datasets e arquivos temporários de processamento dentro da sua pasta '''home'''. Os datasets são muitos arquivos que vão ser acessados durante o experimento e que seu tamanho total, em geral, é &amp;gt;=500GB.  Pois isso aumenta o tráfego na rede desnecessáriamente. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Massa de dados e arquivos maiores, tais como datasets, dados pre-processados e resultados parciais, devem ser armazenados em locais de uso comum dentro de uma pasta com o &amp;quot;nome do usuário&amp;quot; ou &amp;quot;nome do projeto&amp;quot; (no caso de um grupo de trabalho maior que tem um aluno sênior coordenando).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Temos as seguintes opções de pastas de uso comum para massa de dados:&lt;br /&gt;
**&amp;lt;code&amp;gt;/homeLocal/&amp;lt;/code&amp;gt; : pasta local na máquina, montada no barra da mesma. O usuário pode armazenar seus containers e dados de experimentos.&lt;br /&gt;
**&amp;lt;code&amp;gt;/srv/storage/datasets&amp;lt;/code&amp;gt;) : pasta no servidor de storage para armazenar datasets&lt;br /&gt;
**&amp;lt;code&amp;gt;/srv/storage/singularity/images/&amp;lt;/code&amp;gt; : pasta no servidor de storage para armazenar as imagens singularity fechadas (&amp;lt;code&amp;gt;.sif&amp;lt;/code&amp;gt;) que são executadas nos experimentos.&lt;br /&gt;
**&amp;lt;code&amp;gt;/srv/storage/singularity/forge/&amp;lt;/code&amp;gt; : pasta no servidor de storage para criação de imagens singularity em modo sandbox (evitar deixar as imagens em sandbox, mais detalhes abaixo)&lt;br /&gt;
*** Foi escolhido que das máquinas de processamento na rede, apenas '''EPONA, GHOST e MAGRITTE''' serão capazes de criar um container e abrir em modo edição com '''&amp;lt;code&amp;gt; $sudo singularity shell --writable... &amp;lt;/code&amp;gt;'''. &lt;br /&gt;
*** Outra restrição é que essa permissão só pode ser executada na pasta &amp;lt;code&amp;gt;'''/srv/forge'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
* Cada usuário deve criar uma pasta com seu &amp;quot;nome de usuário&amp;quot; (ou &amp;quot;nome de projeto&amp;quot; se for o caso) dentro da pasta de uso comum para conter seus arquivos. Assim fica organizado e facilita identificar quem são os donos dos containers ou datasets. Exemplos para o nome de usuário &amp;quot;fulano&amp;quot;:&lt;br /&gt;
**  '''O usuário é responsável por liberar o espaço em disco quando não estiver mais precisando do mesmo ou fazendo testes'''&lt;br /&gt;
**&amp;lt;code&amp;gt;/homeLocal/fulano&amp;lt;/code&amp;gt; :&lt;br /&gt;
**&amp;lt;code&amp;gt;/srv/storage/datasets/fulano&amp;lt;/code&amp;gt;&lt;br /&gt;
**&amp;lt;code&amp;gt;/srv/storage/singularity/forge/fulano&amp;lt;/code&amp;gt;&lt;br /&gt;
**&amp;lt;code&amp;gt;/srv/storage/singularity/images/fulano&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* A máquina container para rodar os experimentos deve estar em formato de imagem para rodar mais rápido (&amp;lt;code&amp;gt;.sif&amp;lt;/code&amp;gt;. &lt;br /&gt;
** Porém, enquanto estiver em teste e instalando pacotes, ela deve ser uma &amp;quot;pasta sandbox&amp;quot;.&lt;br /&gt;
** Pedimos que não mantenham muitas imagens singularity em modo sandbox. Sempre que possível, feche sua imagem (converter para &amp;lt;code&amp;gt;.sif&amp;lt;/code&amp;gt; e de preferência coloque-as na pasta storage/singularity/images.&lt;br /&gt;
** '''Obs:''' Imagens em modo sandbox deixam uma quantidade enorme de arquivos, e como o servidor de storage tem que mapear todos os arquivos na memória RAM, e às vezes a mesma estoura por esse motivo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Instalação ==&lt;br /&gt;
Toda máquina de processamento do Verlab/J (máquinas com GPU) deve ter o Singularity instalado e não precisam ter pacotes específicos de software como ROS, cuda, tensorflow. &lt;br /&gt;
&lt;br /&gt;
A equipe de rede é responsável por manter máquinas locais e máquinas de processamento disponíveis para executar o singularity. Foi escolhido que o sigularity estará disponível apenas nas máquinas com GPU Nvidia, assim confira a lista de máquinas na [https://www.verlab.dcc.ufmg.br/restrict-area/ área restrita] do site do verlab:&lt;br /&gt;
&lt;br /&gt;
=== Estações de trabalho Desktop no Verlab/J com GPU Nvidia ===&lt;br /&gt;
* Instalar o Singularity em toda máquina host com GPU (máquina de processamento)&lt;br /&gt;
* Criar a pasta &amp;lt;code&amp;gt;/homeLocal&amp;lt;/code&amp;gt; em toda máquina host. &lt;br /&gt;
** O usuário precisa solicitar à equipe de rede para criar uma pasta filha na &amp;lt;code&amp;gt;/homeLocal/nome_do_usuario&amp;lt;/code&amp;gt; e dar permissão de leitura/escrita. Assim, para casos específicos é possível criar e modificarem máquinas container localmente, sem usar o serviço de storage.&lt;br /&gt;
* Configurar o comando &amp;lt;code&amp;gt; $sudo singularity ... &amp;lt;/code&amp;gt; de modo que todo usuário possa rodá-lo dentro da pasta &amp;lt;code&amp;gt;/homeLocal&amp;lt;/code&amp;gt;, sem necessitar de senha root&lt;br /&gt;
&lt;br /&gt;
=== Servidores de Processamento da rede Verlab/J com GPU Nvidia ===&lt;br /&gt;
* Configurar montagem automática das pastas na rede:&lt;br /&gt;
**&amp;lt;code&amp;gt;/srv/forge&amp;lt;/code&amp;gt; (apenas '''EPONA, GHOST e MAGRITTE''')&lt;br /&gt;
**&amp;lt;code&amp;gt;/srv/storage/datasets&amp;lt;/code&amp;gt;&lt;br /&gt;
**&amp;lt;code&amp;gt;/srv/storage/singularity/images/&amp;lt;/code&amp;gt;&lt;br /&gt;
**&amp;lt;code&amp;gt;/srv/storage/singularity/forge/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Foi escolhido que das máquinas de processamento na rede, apenas '''EPONA, GHOST e MAGRITTE''' serão capazes de criar um container e abrir em modo edição com '''&amp;lt;code&amp;gt; $sudo singularity shell --writable... &amp;lt;/code&amp;gt;'''. &lt;br /&gt;
* Uma segunda restrição é que essa permissão só pode ser executada na pasta &amp;lt;code&amp;gt;'''/srv/forge'''&amp;lt;/code&amp;gt;&lt;br /&gt;
* Configurar a montagem da pasta &amp;lt;code&amp;gt;/srv/forge&amp;lt;/code&amp;gt; nas máquinas EPONA, GHOST e MAGRITTE e configurar a montagem das mesmas para que o comando &amp;lt;code&amp;gt; $sudo singularity ... &amp;lt;/code&amp;gt; possa ser executado por qualquer usuário, sem necessitar de permissão root&lt;br /&gt;
* Para executar o container em modo leitura ('''&amp;lt;code&amp;gt;$singularity shell...&amp;lt;/code&amp;gt;'''), a pasta &amp;lt;code&amp;gt;/srv/forge&amp;lt;/code&amp;gt; é espelhada nas demais máquinas:&lt;br /&gt;
**&amp;lt;code&amp;gt;/srv/storage/singularity/forge$&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Dicas de Uso ==&lt;br /&gt;
&lt;br /&gt;
O uso do Singularity é direto ao ponto em muitos sentidos. Isso se deve ao fato de que, para utilizar os recursos da GPU, o container Singularity faz um linking com o driver da máquina host, o que já disponibiliza, para o container, a mesma versão do driver e do CUDA que já estão instalados na máquina host.&lt;br /&gt;
A principal vantagem dessa abordagem é evitar ter que fazer configurações extras como a do nvidia-container-toolkit, que é necessária no Docker.&lt;br /&gt;
&lt;br /&gt;
Ainda assim, é importante prestar atenção à versão do driver Nvidia instalada no sistema para que o container consiga acessar a GPU!&lt;br /&gt;
&lt;br /&gt;
A versão de CUDA instalada dentro do container é totalmente independente da versão instalada na máquina host, o que significa que é possível rodar uma versão do CUDA no container que é diferente da versão instalada na máquina host. Mas é importante prestar atenção que a versão do driver do container será sempre igual à versão do driver na máquina host, pois é feito um link do container para o host, e isso não pode ser mudado. Por conta disso, pode ser que a versão do driver atual não suporte todas as versões do CUDA. Para ver quais versões são suportadas, é importante se atentar a quais&lt;br /&gt;
versões do CUDA a versão do driver atual suporta. Isso pode ser verificado em https://docs.nvidia.com/deploy/cuda-compatibility/index.html.&lt;br /&gt;
&lt;br /&gt;
A versão instalada do driver pode ser obtida rodando &amp;lt;code&amp;gt;nvidia-smi&amp;lt;/code&amp;gt; dentro da máquina host.&lt;/div&gt;</summary>
		<author><name>Rada</name></author>	</entry>

	</feed>