데이터 베이스 MySQL 튜토리얼 决定彻底放弃对MooseFS的研究

决定彻底放弃对MooseFS的研究

Jun 07, 2016 pm 03:06 PM
분산 철저한 포기하다 연구

虽然对 分布式 也有一些了解,但是一直没有深入到代码去 研究 具体的实现。在群里咨询了一下,自己也google了一些资料,最终 决定 从MooseFS入手来深入 研究 分布式 系统 。第一步,就是从网上找文档,自己动手安装部署一番。官方网站上有一个中文的安装手册

  虽然对分布式也有一些了解,但是一直没有深入到代码去研究具体的实现。在群里咨询了一下,自己也google了一些资料,最终决定从MooseFS入手来深入研究分布式系统。第一步,就是从网上找文档,自己动手安装部署一番。官方网站上有一个中文的安装手册,非常nice,整个安装配置过程也非常顺利,感觉还不错,就是看它的代码实现。看完之后有些失望,在main函数中的第一个函数strerr_init()中看到了这样的代码:

for (n=0 ; errtab[n].str ; n++) {}
로그인 후 복사
而errtab的定义(部分)如下所示:

static errent errtab[] = {
#ifdef E2BIG
	{E2BIG,"E2BIG (Argument list too long)"},
#endif
#ifdef EACCES
	{EACCES,"EACCES (Permission denied)"},
#endif
......
	{0,NULL}
};
로그인 후 복사
很明显,那个循环仅仅是为了计算errtab中元素的个数,而这样的计算有必要用一个循环么?sizeof不能解决么?我实现看不出来作者这里要写一个循环的好处是什么?

  另一个地方让我感觉作者在写代码的时候很不用心,cfg_reload()在解析配置文件时定义了一个缓冲区linebuff[1000]数组来存储每行读取的内容。mfs解析配置文件时是按行读取的,每行的配置内容类似“key=value"这样的形式。这个缓冲区的长度定义为1000,也让我很不解。因为在定义缓冲区或分配内存的时候,一般都会考虑到对齐,都会对齐到word size或者CPU cache line的长度。这里的1000让我很不解!

  代码中还有很多无用的、多余的判断。例如下面的代码段:

    logappname = cfg_getstr("SYSLOG_IDENT",STR(APPNAME));

	if (rundaemon) {
		if (logappname[0]) {
			openlog(logappname, LOG_PID | LOG_NDELAY , LOG_DAEMON);
		} else {
			openlog(STR(APPNAME), LOG_PID | LOG_NDELAY , LOG_DAEMON);
		}
	} 
로그인 후 복사
这个APPNAME是在编译的时候通过-DAPPNAME=mfsmaster这样的方式定义的一个宏,所以这个宏是必须定义的,否则前面的代码就没法运行(获取配置文件名称)。而且获取SYSLOG_IDENT配置变量的值是会指定默认值,所以if (logappname[0])这样的判断完全多余。如果是在两个函数中,这样的判断还说的过去,可是获取配置变量值的操作和
判断仅一个空行之隔,没必要到极点了吧。

  抛开这些细节性的东西不提,mfs选择的I/O复用机制也让人不敢恭维。现在需要监听套接字的读写事件,毫无疑问首选的eventpoll。如果没有记错的话,moosefs是07年开始的,这个时候内核中的eventpoll机制已经很完善了,实在不懂作者为什么要选用poll()来作为I/O复用的接口。在继续之前,先看一下下面的代码:

        i = poll(pdesc,ndesc,50);
		......
		if (i  我不明白在poll()返回-1时,为什么要检查EAGAIN错误。查看了man手册,只有EFAULT、EINTR、EINVAL、ENOMEM错误,看了一下内核代码,也没有返回EAGAIN错误的地方。而且很不明白,为什么在EAGAIN的时候要调用usleep()等待100毫秒,不理解!
<p>  最终<strong>彻底</strong>击穿我的信心的是matoclserv_gotpacket()函数,这个函数通过判断eptr->registered的值来做不同的三种处理,这三个代码块中很多都是可以合并的。要么给每种处理封装成一个函数,要么将这三块代码合并成一块,这样看着不是更简洁么?很多switch-case分支中的处理也不用区分eptr->registered的值,为什么写的这么庞大?难道作者在写的时候为了方便,复制粘贴了一番?反正我是很不理解,这样的代码风格真是让我没办法看下去,我<strong>决定</strong><strong>放弃</strong>了。我知道半途而废很不好,本来自己写代码风格就不好,怕看完之后更偏了,所以果断<strong>放弃</strong>!</p>
<p>  下面是matoclserv_gotpacket()函数的代码,大家欣赏一下:</p>
<p></p><pre name="code" class="cpp">void matoclserv_gotpacket(matoclserventry *eptr,uint32_t type,const uint8_t *data,uint32_t length) {
	if (type==ANTOAN_NOP) {
		return;
	}
	if (eptr->registered==0) {	// unregistered clients - beware that in this context sesdata is NULL
		switch (type) {
			case CLTOMA_FUSE_REGISTER:
				matoclserv_fuse_register(eptr,data,length);
				break;
			case CLTOMA_CSERV_LIST:
				matoclserv_cserv_list(eptr,data,length);
				break;
			case CLTOMA_SESSION_LIST:
				matoclserv_session_list(eptr,data,length);
				break;
			case CLTOAN_CHART:
				matoclserv_chart(eptr,data,length);
				break;
			case CLTOAN_CHART_DATA:
				matoclserv_chart_data(eptr,data,length);
				break;
			case CLTOMA_INFO:
				matoclserv_info(eptr,data,length);
				break;
			case CLTOMA_FSTEST_INFO:
				matoclserv_fstest_info(eptr,data,length);
				break;
			case CLTOMA_CHUNKSTEST_INFO:
				matoclserv_chunkstest_info(eptr,data,length);
				break;
			case CLTOMA_CHUNKS_MATRIX:
				matoclserv_chunks_matrix(eptr,data,length);
				break;
			case CLTOMA_QUOTA_INFO:
				matoclserv_quota_info(eptr,data,length);
				break;
			case CLTOMA_EXPORTS_INFO:
				matoclserv_exports_info(eptr,data,length);
				break;
			case CLTOMA_MLOG_LIST:
				matoclserv_mlog_list(eptr,data,length);
				break;
			default:
				syslog(LOG_NOTICE,"main master server module: got unknown message from unregistered (type:%"PRIu32")",type);
				eptr->mode=KILL;
		}
	} else if (eptr->registeredsesdata==NULL) {
			syslog(LOG_ERR,"registered connection without sesdata !!!");
			eptr->mode=KILL;
			return;
		}
		switch (type) {
			case CLTOMA_FUSE_REGISTER:
				matoclserv_fuse_register(eptr,data,length);
				break;
			case CLTOMA_FUSE_RESERVED_INODES:
				matoclserv_fuse_reserved_inodes(eptr,data,length);
				break;
			case CLTOMA_FUSE_STATFS:
				matoclserv_fuse_statfs(eptr,data,length);
				break;
			case CLTOMA_FUSE_ACCESS:
				matoclserv_fuse_access(eptr,data,length);
				break;
			case CLTOMA_FUSE_LOOKUP:
				matoclserv_fuse_lookup(eptr,data,length);
				break;
			case CLTOMA_FUSE_GETATTR:
				matoclserv_fuse_getattr(eptr,data,length);
				break;
			case CLTOMA_FUSE_SETATTR:
				matoclserv_fuse_setattr(eptr,data,length);
				break;
			case CLTOMA_FUSE_READLINK:
				matoclserv_fuse_readlink(eptr,data,length);
				break;
			case CLTOMA_FUSE_SYMLINK:
				matoclserv_fuse_symlink(eptr,data,length);
				break;
			case CLTOMA_FUSE_MKNOD:
				matoclserv_fuse_mknod(eptr,data,length);
				break;
			case CLTOMA_FUSE_MKDIR:
				matoclserv_fuse_mkdir(eptr,data,length);
				break;
			case CLTOMA_FUSE_UNLINK:
				matoclserv_fuse_unlink(eptr,data,length);
				break;
			case CLTOMA_FUSE_RMDIR:
				matoclserv_fuse_rmdir(eptr,data,length);
				break;
			case CLTOMA_FUSE_RENAME:
				matoclserv_fuse_rename(eptr,data,length);
				break;
			case CLTOMA_FUSE_LINK:
				matoclserv_fuse_link(eptr,data,length);
				break;
			case CLTOMA_FUSE_GETDIR:
				matoclserv_fuse_getdir(eptr,data,length);
				break;
/* CACHENOTIFY
			case CLTOMA_FUSE_DIR_REMOVED:
				matoclserv_fuse_dir_removed(eptr,data,length);
				break;
*/
			case CLTOMA_FUSE_OPEN:
				matoclserv_fuse_open(eptr,data,length);
				break;
			case CLTOMA_FUSE_READ_CHUNK:
				matoclserv_fuse_read_chunk(eptr,data,length);
				break;
			case CLTOMA_FUSE_WRITE_CHUNK:
				matoclserv_fuse_write_chunk(eptr,data,length);
				break;
			case CLTOMA_FUSE_WRITE_CHUNK_END:
				matoclserv_fuse_write_chunk_end(eptr,data,length);
				break;
// fuse - meta
			case CLTOMA_FUSE_GETTRASH:
				matoclserv_fuse_gettrash(eptr,data,length);
				break;
			case CLTOMA_FUSE_GETDETACHEDATTR:
				matoclserv_fuse_getdetachedattr(eptr,data,length);
				break;
			case CLTOMA_FUSE_GETTRASHPATH:
				matoclserv_fuse_gettrashpath(eptr,data,length);
				break;
			case CLTOMA_FUSE_SETTRASHPATH:
				matoclserv_fuse_settrashpath(eptr,data,length);
				break;
			case CLTOMA_FUSE_UNDEL:
				matoclserv_fuse_undel(eptr,data,length);
				break;
			case CLTOMA_FUSE_PURGE:
				matoclserv_fuse_purge(eptr,data,length);
				break;
			case CLTOMA_FUSE_GETRESERVED:
				matoclserv_fuse_getreserved(eptr,data,length);
				break;
			case CLTOMA_FUSE_CHECK:
				matoclserv_fuse_check(eptr,data,length);
				break;
			case CLTOMA_FUSE_GETTRASHTIME:
				matoclserv_fuse_gettrashtime(eptr,data,length);
				break;
			case CLTOMA_FUSE_SETTRASHTIME:
				matoclserv_fuse_settrashtime(eptr,data,length);
				break;
			case CLTOMA_FUSE_GETGOAL:
				matoclserv_fuse_getgoal(eptr,data,length);
				break;
			case CLTOMA_FUSE_SETGOAL:
				matoclserv_fuse_setgoal(eptr,data,length);
				break;
			case CLTOMA_FUSE_APPEND:
				matoclserv_fuse_append(eptr,data,length);
				break;
			case CLTOMA_FUSE_GETDIRSTATS:
				matoclserv_fuse_getdirstats_old(eptr,data,length);
				break;
			case CLTOMA_FUSE_TRUNCATE:
				matoclserv_fuse_truncate(eptr,data,length);
				break;
			case CLTOMA_FUSE_REPAIR:
				matoclserv_fuse_repair(eptr,data,length);
				break;
			case CLTOMA_FUSE_SNAPSHOT:
				matoclserv_fuse_snapshot(eptr,data,length);
				break;
			case CLTOMA_FUSE_GETEATTR:
				matoclserv_fuse_geteattr(eptr,data,length);
				break;
			case CLTOMA_FUSE_SETEATTR:
				matoclserv_fuse_seteattr(eptr,data,length);
				break;
/* do not use in version before 1.7.x */
			case CLTOMA_FUSE_QUOTACONTROL:
				matoclserv_fuse_quotacontrol(eptr,data,length);
				break;
/* for tools - also should be available for registered clients */
			case CLTOMA_CSERV_LIST:
				matoclserv_cserv_list(eptr,data,length);
				break;
			case CLTOMA_SESSION_LIST:
				matoclserv_session_list(eptr,data,length);
				break;
			case CLTOAN_CHART:
				matoclserv_chart(eptr,data,length);
				break;
			case CLTOAN_CHART_DATA:
				matoclserv_chart_data(eptr,data,length);
				break;
			case CLTOMA_INFO:
				matoclserv_info(eptr,data,length);
				break;
			case CLTOMA_FSTEST_INFO:
				matoclserv_fstest_info(eptr,data,length);
				break;
			case CLTOMA_CHUNKSTEST_INFO:
				matoclserv_chunkstest_info(eptr,data,length);
				break;
			case CLTOMA_CHUNKS_MATRIX:
				matoclserv_chunks_matrix(eptr,data,length);
				break;
			case CLTOMA_QUOTA_INFO:
				matoclserv_quota_info(eptr,data,length);
				break;
			case CLTOMA_EXPORTS_INFO:
				matoclserv_exports_info(eptr,data,length);
				break;
			case CLTOMA_MLOG_LIST:
				matoclserv_mlog_list(eptr,data,length);
				break;
			default:
				syslog(LOG_NOTICE,"main master server module: got unknown message from mfsmount (type:%"PRIu32")",type);
				eptr->mode=KILL;
		}
	} else {	// old mfstools
		if (eptr->sesdata==NULL) {
			syslog(LOG_ERR,"registered connection (tools) without sesdata !!!");
			eptr->mode=KILL;
			return;
		}
		switch (type) {
// extra (external tools)
			case CLTOMA_FUSE_REGISTER:
				matoclserv_fuse_register(eptr,data,length);
				break;
			case CLTOMA_FUSE_READ_CHUNK:	// used in mfsfileinfo
				matoclserv_fuse_read_chunk(eptr,data,length);
				break;
			case CLTOMA_FUSE_CHECK:
				matoclserv_fuse_check(eptr,data,length);
				break;
			case CLTOMA_FUSE_GETTRASHTIME:
				matoclserv_fuse_gettrashtime(eptr,data,length);
				break;
			case CLTOMA_FUSE_SETTRASHTIME:
				matoclserv_fuse_settrashtime(eptr,data,length);
				break;
			case CLTOMA_FUSE_GETGOAL:
				matoclserv_fuse_getgoal(eptr,data,length);
				break;
			case CLTOMA_FUSE_SETGOAL:
				matoclserv_fuse_setgoal(eptr,data,length);
				break;
			case CLTOMA_FUSE_APPEND:
				matoclserv_fuse_append(eptr,data,length);
				break;
			case CLTOMA_FUSE_GETDIRSTATS:
				matoclserv_fuse_getdirstats(eptr,data,length);
				break;
			case CLTOMA_FUSE_TRUNCATE:
				matoclserv_fuse_truncate(eptr,data,length);
				break;
			case CLTOMA_FUSE_REPAIR:
				matoclserv_fuse_repair(eptr,data,length);
				break;
			case CLTOMA_FUSE_SNAPSHOT:
				matoclserv_fuse_snapshot(eptr,data,length);
				break;
			case CLTOMA_FUSE_GETEATTR:
				matoclserv_fuse_geteattr(eptr,data,length);
				break;
			case CLTOMA_FUSE_SETEATTR:
				matoclserv_fuse_seteattr(eptr,data,length);
				break;
/* do not use in version before 1.7.x */
			case CLTOMA_FUSE_QUOTACONTROL:
				matoclserv_fuse_quotacontrol(eptr,data,length);
				break;
/* ------ */
			default:
				syslog(LOG_NOTICE,"main master server module: got unknown message from mfstools (type:%"PRIu32")",type);
				eptr->mode=KILL;
		}
	}
}
로그인 후 복사
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

모델, 데이터 및 프레임워크에 대한 심층 분석: 효율적인 대규모 언어 모델에 대한 철저한 54페이지 검토 모델, 데이터 및 프레임워크에 대한 심층 분석: 효율적인 대규모 언어 모델에 대한 철저한 54페이지 검토 Jan 14, 2024 pm 07:48 PM

대규모 언어 모델(LLM)은 자연어 이해, 언어 생성, 복잡한 추론을 비롯한 여러 중요한 작업에서 강력한 기능을 입증했으며 사회에 지대한 영향을 미쳤습니다. 그러나 이러한 뛰어난 기능을 사용하려면 상당한 교육 리소스(왼쪽 참조)와 긴 추론 시간(오른쪽 참조)이 필요합니다. 따라서 연구자들은 효율성 문제를 해결하기 위한 효과적인 기술적 수단을 개발해야 합니다. 또한 그림의 오른쪽에서 볼 수 있듯이 Mistral-7B와 같은 일부 효율적인 LLM(LanguageModel)이 LLM의 설계 및 배포에 성공적으로 사용되었습니다. 이러한 효율적인 LLM은 LLaMA1-33B와 유사한 정확도를 유지하면서 추론 메모리를 크게 줄일 수 있습니다.

Windows.old를 완전히 제거하는 방법 Windows.old를 완전히 제거하는 방법 Feb 18, 2024 pm 05:32 PM

Windows.old 폴더는 Windows 10 업데이트 이전 운영 체제 버전에서 생성된 폴더입니다. 이 폴더에는 오래된 Windows 설치 파일, 프로그램 파일, 개인 파일이 포함되어 있으며 많은 디스크 공간을 차지합니다. Windows 10 업데이트를 사용한 후 일정 기간 동안 이전 운영 체제 버전으로 롤백하지 않을 것이라고 확인한 경우 Windows.old 폴더를 완전히 삭제하는 것이 좋습니다. 선택할 수 있는 몇 가지 방법은 다음과 같습니다.

Nvidia의 차세대 GPU, H100을 깨다 공개! 2024년에 공개된 최초의 3nm 멀티칩 모듈 디자인 Nvidia의 차세대 GPU, H100을 깨다 공개! 2024년에 공개된 최초의 3nm 멀티칩 모듈 디자인 Sep 30, 2023 pm 12:49 PM

3nm 공정, H100을 능가하는 성능! 최근 외신 디지타임스는 엔비디아가 차세대 GPU인 B100(코드명 '블랙웰')을 인공지능(AI)과 고성능컴퓨팅(HPC) 애플리케이션용 제품으로 개발 중이라는 소식을 전했다. B100은 TSMC의 3nm 공정 공정과 더욱 복잡한 MCM(멀티 칩 모듈) 설계를 사용하며 2024년 4분기에 출시될 예정입니다. 인공지능 GPU 시장의 80% 이상을 독점하고 있는 엔비디아의 경우, B100을 이용해 철이 뜨거울 때 공격할 수 있고, 이번 AI 배치 물결에서 AMD, 인텔 등 도전자들을 더욱 공격할 수 있다. NVIDIA 추정에 따르면, 2027년까지 이 분야의 출력 가치는 대략적으로 도달할 것으로 예상됩니다.

Redis를 사용하여 분산 데이터 동기화를 달성하는 방법 Redis를 사용하여 분산 데이터 동기화를 달성하는 방법 Nov 07, 2023 pm 03:55 PM

Redis를 사용하여 분산 데이터 동기화를 달성하는 방법 인터넷 기술의 발전과 점점 더 복잡해지는 애플리케이션 시나리오로 인해 분산 시스템의 개념이 점점 더 널리 채택되고 있습니다. 분산 시스템에서는 데이터 동기화가 중요한 문제입니다. 고성능 인메모리 데이터베이스인 Redis는 데이터를 저장하는 데 사용될 수 있을 뿐만 아니라 분산된 데이터 동기화를 달성하는 데에도 사용할 수 있습니다. 분산 데이터 동기화에는 일반적으로 게시/구독(Publish/Subscribe) 모드와 마스터-슬레이브 복제(Master-slave)의 두 가지 공통 모드가 있습니다.

VPR 2024 만점 시험지! Meta는 EfficientSAM을 제안합니다: 모든 것을 빠르게 분할하세요! VPR 2024 만점 시험지! Meta는 EfficientSAM을 제안합니다: 모든 것을 빠르게 분할하세요! Mar 02, 2024 am 10:10 AM

EfficientSAM의 이 작업은 CVPR2024에 5/5/5점 만점으로 포함되었습니다! 작가는 그 결과를 아래 사진처럼 소셜미디어에 공유했습니다. 르쿤 튜링상 수상자도 이 작품을 강력 추천했습니다! 최근 연구에서 Meta 연구진은 SAM을 사용한 SAMI(Mask Image Pre-training)라는 새로운 개선된 방법을 제안했습니다. 이 방법은 MAE 사전 훈련 기술과 SAM 모델을 결합하여 고품질 사전 훈련된 ViT 인코더를 달성합니다. SAMI를 통해 연구자들은 모델의 성능과 효율성을 개선하고 비전 작업을 위한 더 나은 솔루션을 제공하려고 노력합니다. 이 방법의 제안은 컴퓨터 비전 및 딥 러닝 분야를 더욱 탐구하고 개발할 수 있는 새로운 아이디어와 기회를 제공합니다. 서로 다른 것을 결합하여

SD 커뮤니티의 I2V 어댑터: 구성이 필요하지 않으며 플러그 앤 플레이, Tusheng 비디오 플러그인과 완벽하게 호환됩니다. SD 커뮤니티의 I2V 어댑터: 구성이 필요하지 않으며 플러그 앤 플레이, Tusheng 비디오 플러그인과 완벽하게 호환됩니다. Jan 15, 2024 pm 07:48 PM

이미지-비디오 생성(I2V) 작업은 정적 이미지를 동적 비디오로 변환하는 것을 목표로 하는 컴퓨터 비전 분야의 과제입니다. 이 작업의 어려움은 이미지 콘텐츠의 신뢰성과 시각적 일관성을 유지하면서 단일 이미지에서 시간 차원의 동적 정보를 추출하고 생성하는 것입니다. 기존 I2V 방법에는 이 목표를 달성하기 위해 복잡한 모델 아키텍처와 많은 양의 교육 데이터가 필요한 경우가 많습니다. 최근 Kuaishou가 주도한 새로운 연구 결과 "I2V-Adapter: AGeneralImage-to-VideoAdapter for VideoDiffusionModels"가 발표되었습니다. 본 연구에서는 혁신적인 이미지-비디오 변환 방법을 소개하고 경량 어댑터 모듈을 제안합니다.

Google AI 라이징 스타가 피카로 전환: 비디오 세대 뤼미에르, 창립 과학자 역할 Google AI 라이징 스타가 피카로 전환: 비디오 세대 뤼미에르, 창립 과학자 역할 Feb 26, 2024 am 09:37 AM

영상 생성이 본격화되고 있으며, 피카는 위대한 장군, 즉 피카의 창립 과학자인 구글 연구원 오메르 바르탈(Omer Bar-Tal)을 맞이했습니다. 한 달 전, 구글이 영상 생성 모델인 뤼미에르(Lumiere)를 공동저자로 출시했는데, 그 효과는 놀라웠다. 당시 네티즌들은 “구글이 영상 세대 전쟁에 합류했는데, 또 한 번 볼만한 좋은 쇼가 있다”고 말했다. StabilityAI CEO와 Google의 전 동료들을 포함하여 업계 관계자들이 축복을 보냈습니다. 뤼미에르의 첫 작품, 막 석사 학위를 취득한 오메르 바르탈(Omer Bar-Tal)은 2021년 텔아비브 대학교 수학과 컴퓨터과학과를 졸업한 뒤 와이즈만 과학원에서 컴퓨터 석사 과정을 공부했다. 주로 이미지 및 비디오 합성 분야의 연구에 중점을 두고 있습니다. 그의 논문 결과는 여러 차례 발표되었습니다

이미지와 텍스트 생성을 통합하는 MiniGPT-5가 출시되었습니다. 토큰은 Voken이 되고 모델은 계속해서 쓸 수 있을 뿐만 아니라 자동으로 그림을 추가할 수도 있습니다. 이미지와 텍스트 생성을 통합하는 MiniGPT-5가 출시되었습니다. 토큰은 Voken이 되고 모델은 계속해서 쓸 수 있을 뿐만 아니라 자동으로 그림을 추가할 수도 있습니다. Oct 11, 2023 pm 12:45 PM

대규모 모델은 언어와 시각 사이를 도약하고 있으며 텍스트와 이미지 콘텐츠를 원활하게 이해하고 생성할 것을 약속합니다. 일련의 최근 연구에서 다중 모드 기능 통합은 증가하는 추세일 뿐만 아니라 이미 다중 모드 대화에서 콘텐츠 생성 도구에 이르기까지 주요 발전을 가져왔습니다. 대규모 언어 모델은 텍스트 이해 및 생성 분야에서 비교할 수 없는 기능을 보여주었습니다. 그러나 일관된 텍스트 내러티브를 사용하여 이미지를 동시에 생성하는 것은 여전히 ​​개발되어야 할 영역입니다. 최근 캘리포니아 대학교 산타크루즈(Santa Cruz) 연구팀은 "생성 바우처" 개념을 기반으로 한 혁신적인 인터리빙 알고리즘인 MiniGPT-5를 제안했습니다. 언어 생성 기술. 논문 주소: https://browse.arxiv.org/p

See all articles